Python 과 JS 는 어떤 공통점 이 있 나 요?
[소 코 박 기]python 과 JS 의 닮 은 점.
[소 박 기 질문]python 과 JS 는 뭐 가 비슷 해요?
[소 본문 박 기]
데이터 형식
Python 에서 가장 많이 사용 되 는 직접 처리 할 수 있 는 데이터 형식 은 다음 과 같은 몇 가지 가 있 습 니 다.
숫자[정수(int),부동 소수점(float),장정 형(long),복수(complex)]
문자열(str)
불 값(bool)
빈 값(없 음)
이외에 도 파 이 썬 은 목록[list],사전[dict]등 다양한 데이터 형식 을 제공 하 였 으 며,이 는 다음 글 에서 소개 할 것 이다.
유형 변환 및 유형 판단
JS 와 매우 유사 합 니 다.python 도 서로 다른 데이터 형식 간 의 강제 와 암시 적 전환 을 실현 할 수 있 습 니 다.예 는 다음 과 같 습 니 다.
강제 형식 변환:
int('3') # 3
str(3.14) # '3.14'
float('3.14') # 3.14
# JS Number ,Python
float(3) # 3.0
bool(3) # True
bool(0) # False
암시 적 형식 변환:
1 + 1.0 # 2.0
1 + False # 1
1.0 + True # 2.0
# JS String + Number = String, py str + int
1 + '1' # TypeError: cannot concatenate 'str' and 'int' objects
또한 코드 를 쓸 때 값 의 유형 을 판단 해 야 합 니 다.python 이 제공 하 는 type()함수 로 변 수 를 가 져 오 거나 isinstance(x,type)를 사용 하여 x 가 해당 하 는 type 형식 에 속 하 는 지 판단 할 수 있 습 니 다.
type(1.3) == float # True
isinstance('a', str) # True
isinstance(1.3, int) # False
isinstance(True, bool) # True
isinstance([], list) # True
isinstance({}, dict) # True
순차 집합 형식집합 이란 한 조 의 요 소 를 포함 하 는 데이터 구 조 를 말 합 니 다.질서 있 는 집합 즉 집합 안의 요 소 는 순서대로 배열 되 어 있 습 니 다.Python 의 질서 있 는 집합 은 다음 과 같은 몇 가지 가 있 습 니 다.list,tuple,str,유 니 코드 입 니 다.
목록 형식
Python 에서 List 형식 은 JS 의 Array 와 유사 합 니 다.
L = [1, 2, 3]
print L[-1] # '3'
L.append(4) #
print L # [1, 2, 3, 4]
L.insert(0, 'hi') #
print L # ['hi', 1, 2, 3, 4]
L.pop() # L.pop(2) ?????? 2 ???
print L # ['hi', 1, 2, 3]
tuple 형식tuple 형식 은 또 다른 질서 있 는 목록 입 니 다.중국 어 는'원 그룹'으로 번역 되 었 습 니 다.tuple 과 list 는 매우 유사 하지만,tuple 이 생 성 되면 수정 할 수 없습니다.
t = (1, 2, 3)
print t[0] # 1
t[0] = 11 # TypeError: 'tuple' object does not support item assignment
t = (1)
print t # 1 t 1
t = (1,) # tuple, Python , tuple ","
print t # (1,)
무질서 집합 유형dict 형식
Python 의 dict 형식 은 JS 의{}과 유사 합 니 다.(가장 큰 차이 점 은 순서 가 없 는 것 입 니 다)다음 과 같은 특징 이 있 습 니 다.
검색 속도 가 빠르다(dict 에 10 개의 요소 가 있 든 10 만 개의 요소 가 있 든 검색 속도 가 같다)
메모리 사용량 이 많 습 니 다(list 형식 과 반대)
dict 의 key 는 중복 할 수 없습니다.
dict 에 저 장 된 key-value 순 서 는 순서 가 없습니다.
d = {
'a': 1,
'b': 2,
'c': 3
}
print d # {'a': 1, 'c': 3, 'b': 2} 인쇄 된 순서 가 정상 적 인 순서 로 나 오지 않 았 음 을 알 수 있다.
# dict
for key,value in d.items():
print('%s: %s' % (key,value))
# a: 1
# c: 3
# b: 2
set 형식때때로 우 리 는 dict 의 key 만 을 원 하고 key 에 대응 하 는 value 에 관심 이 없 으 며 이 집합 요소 가 중복 되 지 않도록 해 야 한다.이때 set 유형 은 도움 이 된다.set 형식 은 다음 과 같은 특징 이 있 습 니 다.
set 에 저 장 된 요 소 는 dict 의 key 와 유사 합 니 다.변 하지 않 는 대상 이 어야 합 니 다.
set 에 저 장 된 요소 도 순서 가 없습니다.
s = set(['A', 'B', 'C', 'C'])
print s # set(['A', 'C', 'B'])
s.add('D')
print s # set(['A', 'C', 'B', 'D'])
s.remove('D')
print s # set(['A', 'C', 'B'])
Python 의 교체Python 의 질서 있 는 집합 과 무질서 한 집합 유형 을 소개 한 후에 반드시 집합 을 옮 겨 다 니 는 for 순환 이 존재 합 니 다.그러나 다른 언어의 표준 for 순환 과 달리 Python 의 모든 교 체 는 for...in 을 통 해 이 루어 집 니 다.다음은 자주 사용 하 는 교체 데모:
색인 반복:
L = ['apple', 'banana', 'orange']
for index, name in enumerate(L): # enumerate() ['apple', 'banana', 'orange'] [(0, 'apple), (1, 'banana'), (2, 'orange')]
print index, '-', name
# 0 - apple
# 1 - banana
# 2 - orange
반복 dict 의 value:
d = { 'apple': 6, 'banana': 8, 'orange': 5 }
print d.values() # [6, 8, 5]
for v in d.values()
print v
# 6
# 8
# 5
dict 의 key 와 value 를 교체 합 니 다:
d = { 'apple': 6, 'banana': 8, 'orange': 5 }
for key, value in d.items()
print key, ':', value
# apple : 6
# banana: 8
# orange: 5
절편 조작 부호Python 이 제공 하 는 절편 조작 자 는 JS 가 제공 하 는 원생 함수 slice()와 유사 합 니 다.절편 조작 부호 가 있어 서 원래 순환 해 야 하 는 조작 을 크게 간소화 하 였 다.
L = ['apple', 'banana', 'orange', 'pear']
L[0:2] # ['apple', 'banana'] 2
L[:2] # ['apple', 'banana'] 0,
L[:] # ['apple', 'banana', 'orange', 'pear'] : ,
L[::2] # ['apple', 'orange'] N , , 2
목록 생 성기[1x1,2x2,3x3,...,10x 10]을 만 들 려 면 어떻게 해 야 합 니까?방법 하 나 는 순환:
L = []
for x in range(1, 11):
L.append(x * x)
그러나 순환 이 너무 번 거 롭 고 목록 생 성식 은 순환 대신 한 줄 의 문장 으로 위의 list 를 생 성 할 수 있다.\#생 성 할 요소 x*x 를 앞 에 놓 고 뒤로 for 순환 하면 list 를 만 들 수 있 습 니 다.
[x * x for x in range(1, 11)]
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
목록 생 성 식 for 순환 뒤에 if 판단(JS 의 filter()함수 와 유사)을 추가 할 수 있 습 니 다.예 는 다음 과 같 습 니 다.
[x * x for x in range(1, 11) if x % 2 == 0]
# [4, 16, 36, 64, 100]
for 순환 은 끼 워 넣 을 수 있 기 때문에 목록 생 성식 에서 도 다 층 for 순환 으로 목록 을 생 성 할 수 있 습 니 다.
[m + n for m in 'ABC' for n in '123']
# ['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']
파 이 썬 함수
기본 매개 변수
JS 에서 ES6 의 기본 매개 변 수 는 바로 Python 을 참고 한 것 입 니 다.용법 은 다음 과 같 습 니 다.
def greet(name='World'):
print 'Hello, ' + name + '.'
greet() # Hello, World.
greet('Python') # Hello, Python.
가 변 매개 변수JS 함수 에서 들 어 오 는 매개 변수의 개 수 를 자동 으로 식별 하 는 것 과 유사 하 며,Python 도 가 변 매개 변수의 이름 앞 에*번 호 를 가 져 오 는 정 의 를 제공 합 니 다.
def fn(*args):
print args
fn() # ()
fn('a') # ('a',)
fn('a', 'b') # ('a', 'b')
Python 해석 기 는 들 어 오 는 매개 변 수 를 하나의 tuple 로 조립 하여 가 변 매개 변수 에 전달 하기 때문에 함수 내부 에서 변 수 를 args 를 하나의 tuple 로 보면 됩 니 다.상용 고급 함수
Python 에서 자주 사용 하 는 함수(map,reduce,filter)의 역할 은 JS 와 일치 하지만 용법 이 조금 다 릅 니 다.
map 함수:함수 f 와 list 를 받 고 함수 f 를 list 의 모든 요소 에 순서대로 작용 하여 새로운 list 를 얻 고 되 돌려 줍 니 다.
def f(x):
return x * x
print map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9]) # [1, 4, 9, 16, 25, 36, 49, 64, 81]
reduce 함수:함수 f 와 list 를 받 아들 이 고(세 번 째 값 을 초기 값 으로 받 아들 일 수 있 습 니 다)reduce()는 list 의 모든 요소 에 함수 f 를 반복 적 으로 호출 하고 최종 결과 값 을 되 돌려 줍 니 다.
def f(x, y):
return x * y
reduce(f, [1, 3, 5]) # 15
filter 함수:하나의 함수 f 와 하나의 list 를 받 습 니 다.이 함수 f 의 역할 은 모든 요 소 를 판단 하고 True 나 False,filter()를 되 돌려 줍 니 다.판단 결과 에 따라 조건 에 맞지 않 는 요 소 를 자동 으로 걸 러 내 고 조건 에 맞 는 요소 로 구 성 된 새로운 list 를 되 돌려 줍 니 다.
def is_odd(x):
return x % 2 == 1
filter(is_odd, [1, 4, 6, 7, 9, 12, 17]) # [1, 7, 9, 17]
익명 함수JS 의 익명 함수 와 달리 Python 의 익명 함수 에는 표현 식 이 하나 밖 에 없고 return 을 쓸 수 없습니다.map()함 수 를 예 로 들 면:
map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]) # [1, 4, 9, 16, 25, 36, 49, 64, 81]
키워드 lambda 는 익명 함 수 를 나타 내 고 사칭 앞의 x 는 함수 인 자 를 나타 내 며 익명 함수 lambda x:x*x 는 실제 적 으로 다음 과 같다.
def f(x):
return x * x
폐쇄 하 다이전에 JS 클 로즈 드 에 관 한 글 을 쓴 적 이 있 습 니 다.예 를 들 어 자 바스 크 립 트 의 클 로즈 드(Closure),그리고 독서 노트-당신 이 모 르 는 자 바스 크 립 트(상),Python 에서 클 로즈 드 의 정의 와 JS 에서 일치 하 는 것 입 니 다.즉,내부 함수 가 외부 함수 의 변 수 를 인용 한 다음 에 내부 함수 로 돌아 갑 니 다.다음은 Py 에서 닫 힌 for 순환 고전 문 제 를 살 펴 보 겠 습 니 다.
# 3 , 1x1,2x2,3x3:
def count():
fs = []
for i in range(1, 4):
def f():
return i * i
fs.append(f)
return fs
f1, f2, f3 = count() # ES6
print f1(), f2(), f3() # 9 9 9
질문그 이 유 는 count()함수 가 3 개의 함 수 를 되 돌려 주 었 을 때 이 3 개의 함수 가 인용 한 변수 i 의 값 이 3 이 되 었 기 때문이다.f1,f2,f3 가 호출 되 지 않 았 기 때문에 이때 그들 은 i*i 를 계산 하지 않 았 고 f1 이 호출 되 었 을 때 i 는 이미 3 으로 변 했다.
패 킷 을 정확하게 사용 하려 면 인 용 된 부분 변 수 는 함수 가 돌아 온 후에 변 하지 않도록 해 야 합 니 다.코드 수정 은 다음 과 같 습 니 다.
방법 1:폐쇄 적 인 역할 영역 을 만 들 었 다 고 이해 할 수 있 습 니 다.i 의 값 은 j 에 게 전 달 된 후에 i 와 아무런 관계 가 없습니다.매번 순환 하여 형 성 된 패 키 지 는 메모리 에 저장 되 어 있다.
def count():
fs = []
for i in range(1, 4):
def f(j):
def g(): #
return j * j
return g
r = f(i)
fs.append(r)
return fs
f1, f2, f3 = count()
print f1(), f2(), f3() # 1 4 9
방법 2:사고방식 이 비교적 교묘 하 다.기본 매개 변수 j 를 사용 하면 함수 가 정 의 될 때 i 의 값 을 얻 을 수 있다.비록 패 킷 을 사용 하지 않 았 지만 방법 과 다른 점 이 있다.
def count():
fs = []
for i in range(1, 4):
def f(j = i): #
return j * j
fs.append(f)
return fs
f1, f2, f3 = count()
print f1(), f2(), f3() # 1 4 9
decorator 장식 기ES6 의 문법 중의 decorator 는 바로 Python 의 decorator 를 참고 한 것 이다.decorator 는 본질 적 으로 고급 함수 입 니 다.함 수 를 매개 변수 로 받 은 다음 새로운 함 수 를 되 돌려 줍 니 다.
그럼 장식 기의 역할 은 어디 에 있 습 니까?이전 일상 항목 에서 ts 로 작 성 된 게 이 트 웨 이 코드:
@Post('/rider/detail') // URL
@log() //
@ResponseBody
public async getRiderBasicInfo(
@RequestBody('riderId') riderId: number,
@RequestBody('cityId') cityId: number,
) {
const result = await this.riderManager.findDetail(cityId, riderId)
return result
}
장식 기 를 사용 하면 모든 함수(예 를 들 어 로그,경로,성능 검 측)가 중복 코드 를 작성 하지 않도록 코드 를 크게 간소화 할 수 있 음 을 알 수 있다.Python 으로 돌아 가면 Python 이 제공 하 는@문법 은 decorator 를 사용 합 니 다.@은 f=decorate(f)와 같 습 니 다.다음은@log()가 Python 에서 의 실현 을 살 펴 보 겠 습 니 다.
#
@log()
def factorial(n):
return reduce(lambda x,y: x*y, range(1, n+1))
print factorial(10)
# @log()
def log():
def log_decorator(f):
def fn(x):
print ' ' + f.__name__ + '()'
return f(x)
return fn
return log_decorator
#
# factorial()
# 3628800
class
대상 지향 프로 그래 밍대상 을 대상 으로 프로 그래 밍 하 는 것 은 일종 의 프로 그래 밍 모델 이다.기본 사상 은 클래스 로 추상 적 인 유형 을 정의 한 다음 에 클래스 의 정의 에 따라 실례 를 만 드 는 것 이다.다른 언어 를 습득 하 는 토대 에서 이 지식 을 이해 하기 쉽다.예 를 들 어 아래 의 두 가지 서법 을 통 해 서로 다른 언어의 언어 특성 간 에 이렇게 많은 공통점 이 있 음 을 알 수 있다.
es6:(첨부:본 논문 의 주 제 는 python 이기 때문에 js 중의 정의 와 인 스 턴 스 의 생 성 을 초보 적 으로 보 여 주 었 을 뿐 쓰기 의 유사 성 을 설명 하기 위해)
class Person {
constructor(name, age) {
this.name = name
this.age = age
}
}
const child1 = new Person('Xiao Ming', 10)
Python:(핵심 요점 은 주석 에 적 혀 있 습 니 다)
# Person : Person child
class Person(object):
address = 'Earth' # ( )
def __init__(self, name, age): # ,__init__()
self.name = name
self.age = age
def get_age(self): # , self, ,
return self.age
child1 = Person('Xiao Ming', 10)
child2 = Person('Xiao Hong', 9)
print child1.name # 'Xiao Ming'
print child2.get_age() # 9
print child1.address # 'Earth'
print child2.address # 'Earth'
이어받다child 는 Student 류 에 속 하고 Student 류 는 People 류 에 속 하기 때문에 계승 을 이 끌 어 냈 다.즉,부모 류 의 방법 속성 을 얻 은 후에 자신의 방법 속성 을 추가 할 수 있다.
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age
class Student(Person):
def __init__(self, name, age, grade):
super(Student, self).__init__(name, age) # Person.__init__(self, name, age)
self.grade = grade
s = Student('Xiao Ming', 10, 90)
print s.name # 'Xiao Ming'
print s.grade # 90
하위 클래스 가 부모 클래스 를 바탕 으로 grade 속성 을 추가 한 것 을 볼 수 있 습 니 다.우 리 는 s 의 유형 을 다시 볼 수 있다.
isinstance(s, Person)
isinstance(s, Student)
이 를 통 해 알 수 있 듯 이 Python 에서 하나의 계승 체인 에서 하나의 인 스 턴 스 는 그 자체 의 유형 으로 볼 수도 있 고 부모 류 의 유형 으로 볼 수도 있다.총결산
위 에서 말 한 것 은 편집장 님 께 서 소개 해 주신 Python 과 JS 가 어떤 공통점 이 있 는 지 여러분 께 도움 이 되 었 으 면 좋 겠 습 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.