JS Pythonと何が似ていますか?

Pythonはまた、Pythonのフィギュアを持っていても研究の被写界深度で、言語、自動スクリプト、爬虫類の非常に広範囲に使用されます。フロントエンド開発者として、ES6はまた、(例えば、デフォルトパラメータ、分割代入、デコレータ、等のような)一方、この資料のいくつかの用途は、意志PythonとJS類推をパイソンから借りた多くの特徴を理解します。かどうかは知識の彼らの幅広さをアップグレードする、またはより良い満たすためにAIの時代、Pythonは言語の価値が学習です。

データの種類

Pythonでは、データの最も一般的に使用されるタイプは以下のとおりで直接処理することができます。

  • デジタル[整数(INT)、フロート(フロート)、(長い)長い整数、複合体(錯体)]
  • 文字列(文字列)
  • ブール値(ブール値)
  • ヌル(なし)

また、Pythonはまた、辞書[辞書]、および以下に記載される他のデータタイプを、[リスト]のリストを提供します。

型変換と種別判定

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

コードしばしば必要タイプ判定値さらなる書き込み、変数の型を取得するために、またはそれぞれの型が型をxはかどうかを決定するためでisinstance(X、タイプ)を使用するように設けられたPythonのタイプ()関数を使用することができます。

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の順序付けられた集合であり、要素のセットを含む:リスト、タプル、STR、ユニコード。

タイプリスト

Pythonは、アレイのタイプJS一覧で似ています

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
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]

タプル型

タプル型は別の順序付けられたリストのための中国語の翻訳である「タプル。」作成したら、タプルとリストが、しかし、タプル非常に似て、それを変更することはできません。

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,)

順序なしコレクション型

辞書の種類

Pythonは、以下の特性を有しているJSの(最大の違いは、それが順序ではないということである){}型辞書に類似しています。

  • (10個の要素または10万要素があるかどうかのdict、検索速度が同じである)速いスピードを探します
  • 大型のメモリ(リストタイプではなく)
  • キーは、辞書を繰り返すことはできません
  • 辞書格納されたキーと値のペアは、シーケンスを命じていません
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
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

セットタイプ

時々、私たちは辞書のキーにしたい、そして、今回値に対応するキーを気にしないが、また、セットのこの要素が繰り返されないことを保証するために、セットタイプが便利です。セットタイプは、次の特性があります。

  • 同様の要素を設定し、キーを辞書格納し、それは不変オブジェクトである必要があります
  • 要素のセットは、順番に格納されていません
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と順不同コレクション型のプレゼンテーションの後、をループのためにそこに設定する必要があります。しかし、他の言語と異なるサイクルのための標準的な、のために...で完全にすることによって、Pythonですべての反復。以下は、いくつかの一般的な反復デモを与えます:

インデックスの反復:

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

値のイテレーションの辞書:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
d ={'apple':6,'banana':8,'orange':5}
print d.values()# [6, 8, 5]
for v in d.values()
   print v
# 6
# 8
# 5

キーと値のdictの反復:

d ={'apple':6,'banana':8,'orange':5}
for key, value in d.items()
   print key,':', value
# apple : 6
# banana: 8
# orange: 5

スライス操作

JSが提供されるネイティブ関数スライス()によって提供されるものと同様のPythonスライシング操作。スライスにより、大幅に元の開始サイクルの一部の動作を簡素化することができます。

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のを、...、10×10]どのようにしますか?第1のループ方法:

L =[]
for x in range(1,11):
   L.append(x * x)

しかし、あまりにも複雑サイクル、および式のリストは、ステートメントの上に生成された循環ラインリストに置き換えてもよいです。

# 把要生成的元素 x * x 放到前面,后面跟 for 循环,就可以把 list 创建出来
[x * x for x in range(1,11)]
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

また、例えば、IF(フィルタで同様のJS()関数)を追加することができるループを以下のリストは、式:

[x * x for x in range(1,11)if x %2==0]
# [4, 16, 36, 64, 100]

ループはネストすることができるため、従って、式のリストに、それはまた、リストを生成する多層ループのために使用することができます。

[m + n for m in'ABC'for n in'123']
# ['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']

Pythonの関数

デフォルトパラメータ

次のように正確にはPythonから借りにおけるJS ES6のデフォルトパラメータは、使用されます。

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
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のインタープリターのようなタプル引数として直接、関数内で、従って、可変パラメータの組に変数をアセンブリに渡されるパラメータのセットを通過します。

一般的な高階関数

Pythonの効果一般的に使用される機能(マップ、低減、フィルタ)、およびJS同じ、しかしわずかに異なる使用。

  • マップ関数:関数fと受信リスト、および関数fは新しいリストとリターンを得るために、リストの各要素に作用することによって順次。
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]
  • 、関数fおよび受信リスト(初期値として許容される第3の値)(減らす)頻繁に呼び出される関数fのリストの各要素のための、および最終結果値を返す:機能を低下させます。
def f(x, y):
   return x * y

reduce(f,[1,3,5])# 15
  • フィルタ関数:関数fとリストを受信し、この関数fの役割はリターンtrueまたはfalse、各要素について決定された決意の結果に基づいて、フィルタ()フィルタ要素の条件に適合しない、要素が修飾によって返さ新しいリスト。
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def is_odd(x):
   return x %2==1

filter(is_odd,[1,4,6,7,9,12,17])# [1, 7, 9, 17]

無名関数

JS匿名関数と異なる場所には、Pythonの無名関数は一つだけの式を持つことができ、およびリターンを書き込むことはできません。一例として、マップ()関数を取ります:

map(lambda x: x * x,[1,2,3,4,5,6,7,8,9])# [1, 4, 9, 16, 25, 36, 49, 64, 81]

キーワードラムダは、大腸xは関数のパラメータを表し前に、あなたは無名関数が見ることができる、無名関数を表しlambda x: x* x、実際にあります:

def f(x):
   return x * x

クロージャ

内:定義では、JavaScriptあなたが知らない(上)とJS Pythonの閉鎖はつまり、一貫している - 以前は、簡単に言え閉鎖(閉鎖)、そして読書ノートにJavaScriptなどのJSの閉鎖に関するいくつかの記事を書いて関数参照変数外層機能、次いで内部関数を返します。Pyのループ閉鎖のための古典的な問題で見てみましょう:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# 希望一次返回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

古い問題、F1()、F2()、F3(1)の結果であってはならない、4、9それは、なぜ実際の結果は9それはありますか?

その理由は、count()関数は、3つの機能を返す場合、基準関数の変数iの三つの値が3になったということです。F1、F2ので、F3は、彼らは計算しません。この時点で、そう、と呼ばれていないi*iF1が呼ばれ、私は3となっています。

適切にクロージャを使用するには、ローカル変数への参照は、関数から戻った後、変更することはできないことを保証する必要があります。次のようにコードを変更します。

方法1:作成し、クローズドスコープとしてパス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:クロージャを使用し、していないが、比較の独創的なアイデア、iの値に関数定義Jに使用されるデフォルトのパラメータは、得ることができるが、この方法は同様です。

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
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

デコレータデコレータ

Pythonのデコレータを描く、まさに構文デコレータES6。デコレータは、本質的に、高次関数、引数として受け取る関数であり、新たな機能を返します。

それはデコレータの役割それ?使用tsが書いたいくつかの日常のアイテムのためのゲートウェイコードの最初:

@Post('/rider/detail')  // URL 路由
@log()                   // 打印日志
 @ResponseBody
 publicasync getRiderBasicInfo(
   @RequestBody('riderId') riderId: number,
   @RequestBody('cityId') cityId: number,
 ){
   const result =awaitthis.riderManager.findDetail(cityId, riderId)
   return result
 }

これは、各機能なしデコレータ大幅に簡素化コードを見ることができる(例えば、ロギング、ルート、性能テストなど)反復コードを書きます。

Pythonは使用デコレータに構文を提供@戻るのPythonに、@をf =飾る(F)と同等です。ここではルック@logはPythonで(達成)です。

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# 我们想把调用的函数名字给打印出来
@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

クラス

オブジェクト指向プログラミング

抽象クラス定義の種類、その後、クラス定義のインスタンスを作成します:オブジェクト指向プログラミングはプログラミングパラダイムである、基本的な考え方です。他の言語の把握に基づき、それが書かれた次の二つから見て、まだ異なる言語の言語機能との間に非常に多くの類似点があることができるよう、知識のこの作品のポイントを理解することは非常に簡単です。

ES6:(添付:主題は、本明細書のpythonであるので、ちょっと早い印象が書き込みの類似性を説明するために、下層階級のJSの定義と例を作成します)

classPerson{
   constructor(name, age){
       this.name = name
       this.age = age
   }
}

const child1 =newPerson('Xiao Ming',10)

Pythonの:(コメントの書き込みのコア要素)

# 定义一个 Person 类:根据 Person 类就可以造成很多 child 实例
classPerson(object):
   address ='Earth'# 类属性 (实例公有)
   def __init__(self, name, age):# 创建实例时,__init__()方法被自动调用
       self.name = name
       self.age = age
   def get_age(self):
   # 定义实例方法,它的第一个参数永远是 self,指向调用该方法的实例本身,其他参数和普通函数是一样的
       returnself.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'

継承

後に親クラスのメソッドのプロパティであるプロパティを取得するために、独自のメソッドを追加することができます。子供が学生のカテゴリに継承させ、リードの人々のカテゴリ、あるクラスの学生に属します。

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
classPerson(object):
   def __init__(self, name, age):
       self.name = name
       self.age = age

classStudent(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

サブクラスは、グレードのプロパティの追加の親クラスに基づいて見ることができます。我々は、sの種類を見ることができます。

isinstance(s,Person)
isinstance(s,Student)

図から分かるように、鎖に連続的にPythonは、独自の型のインスタンスとして見ることができ、それは親クラスの型として見ることができます。

おすすめ

転載: blog.51cto.com/14246112/2455819