two.mdを学習するPython3エントリ

[ TOC]

5. データタイプ変換###

データタイプ変換の場合、関数名としてデータタイプを使用するだけで済みます。データ間の変換を実行できる組み込み関数もいくつかあります。これらの関数は、変換された値を表す新しいオブジェクトを返します。

complex(real [、imag])#値がreal + imag * jの複素数を作成するか、文字列または数値を複素数に変換するために使用されます(最初のパラメーターが文字列の場合、2番目のパラメーターを指定する必要はありません。 。)
repr(x)#オブジェクトxを、インタプリタが読み取れる形式の式文字列に変換します。
tuple(s)#シーケンスsをタプルに変換します
list(s)#シーケンスsをリストに変換します
set(s)#変数セットに変換する
dict(d)#辞書を作成するdはシーケンス(キー、値)タプルである必要があります。
chr(x)#整数を文字に変換する
hex(x)#整数を16進文字列に変換
oct(x)#整数を8進文字列に変換
ord(x)#文字をASCII整数値に変換する
フリーズセット#フリーズしたセットを返します。フリーズ後、セットは要素、リスト、辞書、タプルなどのパラメーターの反復可能オブジェクトを追加または削除できなくなります。

事例:データ型変換機能の使用

#! /usr/bin/python3
# coding:utf-8
# 特徴:数値型変換組み込み関数

print("形成外科: 0xa=",int('0xa',16)," 0x12=",int('12',16)," 010=",int('10',8)) 
          # 16進数の整数に変換,そしてオクタルから整数への変換
print("浮動小数点:",float('123'),float(1))  #フローティングポイントタイプ
print("複数:",complex(1,2),complex("1+2j"))  #转化一个字符串或数为複数
# 注意:この場所は"+"数字の両側にスペースを入れることはできません。つまり、次のように書くことはできません。"1 + 2j"、あるべき"1+2j"、それ以外の場合はエラーが報告されます

cdict =dict(zip(['one','two','three'],[1,2,3]))   #辞書を構築するためのマッピング関数メソッド

print(str(cdict))  #オブジェクトを文字列形式に変換します。
print(repr(cdict))  #オブジェクトを、通訳者が読める形式に変換します。

print(eval(' 2 ** 2'),eval('pow(2,2)'))  #文字列式を実行する,いくつかの数学関数とpythonの計算を実行できます

print(set('runoob'),set('google'))       #セット内の重複する値は削除されますsetprint(frozenset(range(10)))              #新しい不変のコレクションセットプリントを生成する(chr(48),chr(65),chr(97))       #ASCIIコード==>キャラクター
print(ord('0'),ord('A'),ord('a'))    #キャラクター==> ASCII
print(hex(255),hex(15))print("255 oct =",oct(255),"10 oct =",oct(10))

Pythonデータ型変換関数の使用

6. 演算子と優先順位###

**Q:オペレーターとは何ですか? ****
A:変数に、加算、減算、乗算、除算の4つの算術演算を実行させます。

演算子とその優先順位:####

Pythonの優先順位

Pythonの優先順位の詳細

Pythonでのビット単位の操作:
ビット単位の演算子は、計算を実行するために数値をバイナリとして扱います。

&ビットワイズAND演算子:操作に関係する2つの値、対応する2つのビットが両方とも1の場合、ビットの結果は1、それ以外の場合は0です。
| ビット単位のOR演算子:対応する2つのバイナリビットの1つが1である限り、結果のビットは1です。
^ ビット単位のXOR演算子:対応する2つのバイナリビットが異なる場合、結果は1になります。
~ ビット単位の反転演算子:データの各バイナリビットを反転します。つまり、1を0に、0を1に変更します。 (〜xは、符号付き2進数の補数形式の-x-1に似ています)。

<< 左シフト演算子:オペランドのすべてのバイナリビットは、ビット数だけ左にシフトされます。「<<」の右側の数字は、移動するビット数を指定し、上位ビットは破棄され、下位ビットは0で埋められます。

右シフト演算子:「>>」の左側にあるオペランドのすべての2桁を数桁シフトし、「>>」の右側の数字は移動する桁数を指定します。

Python言語は論理演算子をサポートします:(Jade C言語の短絡評価と同様&&)

xおよびyブール「and」-xがFalseの場合、xおよびyはFalseを返し、それ以外の場合は、yの計算値を返します。
xまたはyブール「または」-xがTrueの場合はxの値を返し、そうでない場合はyの計算値を返します。
notxブール「not」-xがTrueの場合、Falseを返します。 xがFalseの場合、Trueを返します。

Pythonメンバー演算子:

文字列、リスト、タプルなど、一連のメンバーが含まれています。
inは、指定された順序で値が見つかった場合はTrueを返し、それ以外の場合はFalseを返します。
not inは、指定された順序で値が見つからない場合はTrueを返し、それ以外の場合はFalseを返します。

Python ID演算子:

2つの識別子がオブジェクトを参照しているかどうかを判断することです
xはyであり、id(x)== id(y)と同様に、同じオブジェクトが参照されている場合はTrueを返し、それ以外の場合はFalseを返します。
2つの識別子が異なるオブジェクトを参照しているかどうかを判断することではありません
xはyではなく、id(a)!= id(b)と同様です。参照が同じオブジェクトでない場合はTrueを返し、そうでない場合はFalseを返します。

ケース:Pythonのさまざまな演算子

#! /usr/bin/python3
# coding:utf-8
# 特徴:特殊動作シンボル検証デモ
#""" Python算術演算子"""print("2 / 4 = ",2/4)   #分割,浮動小数点を取得
print("2 // 4 = ",2// 4)  #分割,整数印刷を取得("2 ** 4 = ",2**4)  #パワー、(最優先)print("5 % 4 = ",5%4)   #残りを取る、

#""" 比較演算子###
a =1
b =2if( a == b ):print("1 -aはbに等しい")else:print("1 -aはbと等しくありません")

#""" 割り当て演算子###
c = a + b
c +=1print("C値は次のとおりです。",c)
c **= c
print("C値は次のとおりです。",c)

#""" Pythonビット操作"""
a =1
b =8print("a&b = ", a&b)  #対
print("a|b = ", a|b)  #または
print("a^b = ", a^b)  #または
print("~a = ",~a)    #ネゲート
print("a<<2 = ", a<<2)   #左に移動

#""" Python論理演算子"""
a =1
b =2print((a and b))  #xがFalseの場合、xとyはFalseを返します。それ以外の場合は、yの計算値を返します。
print((a or b))   #xがTrueの場合、xの値を返します。それ以外の場合、yの計算値を返します。
print(not(a or b)) #xがTrueの場合、Falseを返します。 xがFalseの場合、Trueを返します。

#""" Pythonメンバー演算子"""
a =10
b =5
list =[1,2,3,4,5]if(a in list):print("リスト内のa")else:print("aはリストにありません")if(b not in list):print("aはリストにありません")else:print("bはリストにあります")

#""" Pythonメンバー演算子"""
a =20
b =20if( a is b ):print("1 -aとbのロゴは同じです")else:print("1 -aとbのロゴが同じではありません")
# 注:id()関数は、オブジェクトのメモリアドレスを取得するために使用されます
if(id(a)==id(b)):print("2 -aとbのロゴは同じです")else:print("2 -aとbのロゴが同じではありません")

a,b,c,d,e =20,10,15,5,0
#""" 算術演算子の優先順位の検証""" 
e =(a + b)* c / d       #(30*15)/5print("(a + b) * c /d操作の結果は次のとおりです。",  e)
 
e =((a + b)* c)/ d     # (30*15)/5print("((a + b) * c) /d操作の結果は次のとおりです。",  e)
 
e =(a + b)*(c / d);    # (30)*(15/5)print("(a + b) * (c / d)操作の結果は次のとおりです。",  e)
 
e = a + b * c / d;      #  20+(150/5)print("a + (b * c) /d操作の結果は次のとおりです。",  e)

Pythonのさまざまな演算子の場合

  1. 数値除算は2つの演算子で構成されます。/浮動小数点数を返します。//整数を返します。
  2. 混合計算では、Pythonは整数を浮動小数点数に変換します。
  3. isと==の違いは、前者は2つの変数参照オブジェクトが同じであるかどうかを判断するために使用され、後者は参照変数の値が等しいかどうかを判断するために使用されます。
  4. 論理演算子は、、、または優先度ではありません
  5. 電力指数**は、左側の優先度よりも高く、右側の優先度よりも低くなっています
  6. (x> y)-(x <y)を使用して、x / yが同じかどうかを判断します。x<yが-1を返す場合、x == yが0を返す場合、x> yが1を返す場合

7. Pythonフロー制御構文###

7.1 条件制御とループ####

7.1.1 分岐ステートメント:if elif else

分岐構文:

式の場合:
 ステートメントを実行する
elif式:
 ステートメントを実行する
else:
 ステートメントを実行する
    
# 三元演算子
xif条件elsey//条件が真の場合はxの値をsmallに割り当て、falseの場合はyの値をsmallに割り当てます。

# elseステートメント
1) elseステートメントをifステートメントと組み合わせて、「whatornot」コンテキストを形成します
2) elseステートメントの後にfor/whileステートメントは、「実行後に何ができるか、実行されていない場合は考えない」というコンテキストを形成するために使用されます。
2) elseステートメントをtryステートメントと組み合わせて、「問題ありません。やってみましょう」というコンテキストを形成します。
  1. Pythonには{}を含むコードブロックがないため、インデントを使用して実行されたコードブロックを識別します。
  2. for / whileステートメントと組み合わせると、elseステートメントブロックの内容は、ループが正常に実行された後にのみ実行されます。
7.1.2 ループステートメント:while、for..else ...

終了ループキーワード:break、continue、およびそのループ構文:

while(式条件):
   コードブロックを実行するにはTrue
else:
  ステートメントがfalseの場合、elseステートメントブロックを実行します。
  
  
式の変数の場合:
   ループ本体
else:それは網羅的なリストです(ループの場合)または条件が偽になる(whileループで)ループが終了したときに実行されます,ただし、ループがブレークで終了した場合、ループは実行されません。

ケース:条件はループステートメントによって制御されます

#! /usr/bin/python3
# coding:utf-8
# 特徴:分岐とループ
#- - - - - - - - - - - ifステートメント-----------------
guess =8
temp =int(input("1を入力してください-10値:"))if guess == temp:print("おめでとう,入力した値はちょうどいいです")
elif guess > temp:print("残念です,入力した値がそれよりも小さい")else:print("残念です,入力した値がそれより大きい")

x,y =1,3print("#三元演算子:",end="")print( x if x >3else y )

#- - - - - - - - - - - - whileステートメント---------------
# Fibonacci series:フィボナッチシーケンス(2つの要素の合計が次の数を決定します)
a,b =0,1while b <10:print(b,end=",")
 a,b = b, a+b
print("\n\n")while(1):print('Python!')

# 採用しながら..それ以外の場合は素数を計算します
count  =11/2while count >1:if num % count ==0:print("%d最大の除数は%d "%(11,count))break   #elseを実行せずにエスケープするにはbreakを使用します
    count -=1else:print("%dはプライムです"11)   #ループが使い果たされています(falseの場合、ブレークが発生しても実行は実行されません)

#- - - - - - - - - - - - ステートメントのために---------------for i in"python":print(i,end="|")  #文字を順番に印刷し、|セグメンテーション
print()   

sites =["baidu","Google","Runoob","taobao"]for i in sites:print(i,end=",")       #リストの値を印刷します
print()for i inrange(len(sites)):  #または、リスト4の長さが生成されます(0-3);print(i,sites[i],len(sites[i]))  #インデックス,列表中以インデックス下标的元素,要素の長さ

print()   
# それが素数2であるかどうかを照会します-10それらは素数です
for x inrange(2,10):for y inrange(2,x):if x % y ==0:print(x,'等しい',y ,'*', x // y)breakelse:
  # ループ内の要素を検索,それは網羅的なリストです(ループの場合)または条件が偽になる(whileループで)ループが終了したときに実行されます,ただし、ループがブレークで終了した場合、ループは実行されません。
  print(x,'プライムです')

Pythonの条件はループの場合に制御されます

7.1.3 空のステートメント:パス#####

Python passは空のステートメントです。プログラム構造の整合性を維持するために、passは何も実行せず、通常はプレースホルダーステートメントとして使用されます。次の例を参照してください。

while True:
 pass  #キーボードの中断を待つ(Ctrl+C)
    
# 最小クラス:classMyEmptyClass:
 pass

8. イテレーターとジェネレーター###

8.1 イテレーター####

反復は、Pythonの最も強力な機能の1つであり、コレクション要素にアクセスする方法です。反復子は、トラバーサルの位置を記憶できるオブジェクトです。反復子オブジェクトは、コレクションの最初の要素から、すべての要素がアクセスされるまでアクセスされます。訪問は終わりました、そしてあなたは戻ることなしに進むことができるだけです。
反復子パラメーター:リスト/辞書

イテレーターには、iter()とnext()の2つの基本的なメソッドがあります。

イテレーターを作成し、クラスに実装する必要がある2つのメソッド** iter ()と next ()を使用します。 iter ()メソッドは、特別なイテレーターオブジェクトであるこのイテレーターを返します。オブジェクトは next **()メソッドを実装し、StopIteration例外を使用して反復の完了を識別し、無限ループを防ぎます。

ケース:イテレーター(魔法の方法)

#! /usr/bin/python3
# coding:utf-8
# 機能:イテレーターとジェネレーター

import sys          #sysモジュールを紹介します
list =[1,2,3,4]
it =iter(list)

#** 方法1**#
## 実際、forステートメントの実装はiteriteratorに似ています##
for x in it:print("値", x, end=", ")else:print("\n---------------------------")

#***次の方法2**#
it =iter(list)while True:try:print(next(it), end=",")
 except StopIteration:     #StopIteration例外は、反復の完了を識別し、無限ループを防ぐために使用されます;
  sys.exit()

#**方法3イテレーター-魔法の方法**#
# 初期値が0で、徐々に1ずつ増加する数値を返すイテレーターを作成します。4回実行します。
# マジックメソッドケース(1)classMyNumbers:
 def __iter__(self):  #魔法の方法
  self.a =0return self

 def __next__(self):  #いつ
  try:if self.a <=3:
    x = self.a
    self.a +=1return x
   else:
    raise StopIteration
  except StopIteration:return('反復の終わり')

myclass =MyNumbers()
myiter =iter(myclass)  #実際にトリガー__iter__ミドル=0print(next(myiter), end=" ")  #次の1を実行
print(next(myiter), end=" ")  #次の2回実行
print(next(myiter), end=" ")  #次の3回実行
print(next(myiter), end=" ")  #次の4回実行
print(next(myiter))  #条件による次の5回目の実行(または、StopIterationをスローして反復を終了します)

# ケース2:魔法の方法を使用してフィボナッチシーケンスを実現する
classFibs:
 def __init__(self):
  self.a =0
  self.b =1

 def __iter__(self):return self   #イテレーターなので自分自身を返す

 def __next__(self):
  self.a, self.b = self.b,self.a + self.b
  return self.a   #aは次のフィボナッチ値です
 # def __next__(self):
 #  self.a, self.b = self.b,self.a + self.b
 #  if self.a >10:
 #   raise StopIteration   #手段
 #  return self.a

fibs =Fibs()for each in fibs:if each <20: #戻る
  print(each, end=" ")else:break

#######################
# $ python demo3.24.py
# 0123 反復の終わり
# 11235813

Pythonイテレーターケース

8.2 ジェネレーターの歩留まり####

イールドを使用する関数はジェネレーターと呼ばれます。ジェネレーターは通常の関数とは異なり、イテレーターを返す関数であり、反復操作にのみ使用できます。ジェネレーターがイテレーターであることを理解する方が簡単です。

重要:ジェネレーター関数を呼び出すと、イテレーターオブジェクトが返されます。
ジェネレーターを呼び出して実行するプロセスでは、関数は、yieldに遭遇するたびに一時停止して現在実行中のすべての情報を保存し、yieldの値を返し、next()メソッドが次に実行されるときに現在の位置から実行を継続します。

ケース:ジェネレーター

#! /usr/bin/python3
# 機能:ジェネレータyieldimport sys
 
# ケース1:
def gener():print("ジェネレータが実行されます!",end=" ")yield1  #ここで最初の次の一時停止を実行します
 yield2  #2番目の次の表示を実行します2

my =gener()next(my)  #ジェネレータが実行されます!2next(my)  # 2

# 方法2:
def fibonacci(n): #ジェネレーター機能-フィボナッチ
 a, b, counter =0,1,0while True:
  # カウンター時==10終了(つまり、10回計算)
  if(counter > n):returnyield a  #ジェネレーターが戻る
  a, b = b, a + b
  counter +=1
f =fibonacci(10) #fはイテレーターであり、ジェネレーターによって返されます
 
while True:try:print(next(f), end=" ") #一度に1つのFibonacciシーケンスを返します011235813213455
 except StopIteration:
  sys.exit()

# 方法3:forループは、Stopiteration例外を自動的に解析して終了します
def fbli():
 a =0
 b =1while True:
  a, b = b, a+b
  yield a

for each infbli():  #それぞれ、ジェネレータaの値を返します
 if each <=55:print(each,end=" ")else:break

########## の結果##########
# 1235813213455

9. Python関数###

9.1 関数定義構文####

この関数は、アプリケーションのモジュール性を向上させることができ、コードの再利用率を単独で呼び出すことができます。ユーザーが作成した関数は、ユーザー定義関数と呼ばれます。
関数関数、オブジェクトオブジェクト、モジュールモジュール。

  1. 関数コードブロックはdefキーワードで始まり、関数識別子名と括弧()が続きます。関数の内容はコロンで始まり、インデントされます。
  2. 入力パラメータと独立変数は括弧の間に配置する必要があり、括弧を使用してパラメータを定義できます。
  3. 関数の最初の行では、オプションでdocstringを使用できます。これは関数の説明を格納するために使用されます。それは「 '関数の説明' '」です
  4. return [expression]関数を終了し、オプションで呼び出し元に値を返します。式なしでreturnを返す場合は、Noneを返すことと同じです。

関数構文:

#.__ doc__(関数のデフォルトのプロパティ,彼は特別な属性です,特殊属性フォーマットはこんな感じ)
def関数名(パラメータリスト):'関数のドキュメント:関数名別.__doc__転送' 
  機能本体

#( 正式なパラメータ) formal parameters
#( 引数) actual parameters
def first(name="default"):'名前は、関数定義プロセスの正式なパラメーターです' #taは単なるフォームであるため、パラメーター位置を占めることを意味します。
  print(name,"このとき、nameの値は特定のパラメーター値であるため、実際のパラメーターです。")>>> def hello():print("hello world")     #returnステートメントがないため、Noneが返されます
>>> temp =hello()     #関数の値をtempに返します
hello world    
>>> temp                    #しかし、tempは戻り値を返しません
>>> print(temp)   
None                             #Print-Tempの場合、Noneタイプは返されません。
>>> type(temp)<class'NoneType'>>>> def back():return["Python","Flash",3.1415926]>>>back()['Python','Flash',3.1415926]     #リストに戻る
 
>> def back():return"Python","Flash",3.1415926>>>back()('Python','Flash',3.1415926)   #タプルを返す

デフォルトでは、パラメーター値とパラメーター名は、関数宣言で定義された順序で照合されます。

機能例:

#! /usr/bin/python3
# 機能:機能機能を実現

def fun(num1,num2):'関数関数:2つの数値の合計を求めます'  #関数名別.__doc__関数のドキュメントを呼び出す
 return num1 + num2        #returnを使用して、パラメーターまたはプログラム実行の結果を返します。

def saypython(name='小さなカメ',words="時間を変更する"):  #デフォルトのパラメータを設定し、関数に値が割り当てられていないときに表示します
 ' 機能ドキュメント:私たちの声'print(name +'あなたがいなくて寂しいです->'+ words)print("1 + 2 =",fun(1,2))print("機能の説明:(",fun.__doc__,end=")\n-------------")print("私",saypython('weiyigeek','世界を変える'))  #returnステートメントがないため、何も返されません

saypython('weiyigeek','世界を変える')saypython()  #関数のデフォルトパラメータを使用する,パラメータなしで実行できます,オプションのパラメータ名が組み込まれているため='小さなカメ',words="時間を変更する"print("機能の説明:(",fun.__doc__,end=")\n")

Python関数の定義例

9.2 機能パラメータの詳細####

Python関数パラメーターの受け渡し:

以下は、関数を呼び出すときに使用できる正式なパラメータータイプです。

可変パラメーターは、不確実な複数のパラメーター間で使用されます。
(1)パラメータ名にアスタリスクが1つ追加されます。たとえば、( params)はタプルにパックされます。関数の呼び出し時にパラメータが指定されていない場合、それは空のタプルであり、関数に渡すこともできません。名前のない変数。
(2)(** params)が辞書(dict)の形式でインポートされるなど、2つのアスタリスクがパラメーター名に追加されます。

関数パラメーターの例:

#! /usr/bin/python3
# 機能:機能パラメータ
# 例:実際に印刷()コレクションパラメータが付属しています*Objects
# print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False) 

# /*不変のオブジェクト**/
def ChangeInt(a):
 a =10print("(不変)関数内:",a) #結果は10です

b =2ChangeInt(b)print("(不変)機能外:",b,end="\n\n") #結果は2です

# /*可変オブジェクト**/
def changeme(mylist):
 mylist.append([1,2,3,4])  #この時点で、受信リストが変更されています
 print("(変数)機能の値:",mylist)return
mlist =[6,6,6]changeme(mlist)print("(変数)関数外の値:",mlist)  #リストが変更されました

#! /***可変パラメータ(*)キーワード引数付き**/
def test(*params,exp="weiyi"):print("パラメータの長さ:",len(params),"2番目のパラメーター:",params[1],"Name :",exp)forvarin params:print(var,end=",")return0test(1,"あなたを愛してます",1024,1,exp='weiyigeek')

#! /***可変パラメータ(**) **/
def printmm(arg1,**vardict):'関数のドキュメント:正式なパラメーターは辞書タイプです'print("\n\nはarg1を出力します:",arg1)print("vardict辞書を出力します:",vardict)printmm('test',a=1,b=2,c=3)

#! /***単一のアスタリスクの使用(注意)**/
def star(a,b,*,c):print("a :",a ," b:",b ,' c:', c)star(1,2,c=1024)  #cはキーワード入力値を指定する必要があります。指定しない場合、エラーが報告されます

Python関数パラメーターの例

  1. Pythonのすべてがオブジェクトです。厳密に言えば、値によって渡されるのか、参照によって渡されるのかはわかりません。不変オブジェクトと可変オブジェクトを言う必要があります。
  2. 関数を宣言するとき、パラメーター内のアスタリスク*は単独で表示できますが、アスタリスクの後のパラメーターはキーワードとともに渡す必要があります。

9.3 匿名機能####

Pythonはラムダを使用して匿名関数を作成します。いわゆる匿名とは、関数がdefステートメントなどの標準形式で定義されなくなったことを意味します。
ラムダ式の利点:コードをより簡潔にし、命名制御を考慮する必要がなく、コードの読みやすさを簡素化します。

Q:匿名関数を作成するにはどうすればよいですか?
A:ラムダは単なる表現であり、関数本体はdefよりもはるかに単純です。
ラムダ関数の構文には、次のように1つのステートメントしか含まれていません。
lambda [arg1 [ ,arg2,…..argn ]]:expression

場合:

#! /usr/bin/python3
# 機能:匿名機能を使用する

# 関数定義
sum = lambda arg1,arg2: arg1 + arg2
sum.__doc__ ='機能ドキュメント'

# 匿名関数を呼び出す
print("1 +99の付加価値:",sum(1,99))print(sum.__doc__)

# 高度な使用法とBIF組み込み関数フィルター/マップの使用
# 高度な匿名機能(2で割り切れる値を返すようにフィルター関数を設定します)
show =list(filter(lambda x: x %2,range(10)))print(show)

# マップマッピング表示は%2分割後の結果。
show =list(map(lambda x:x %2,range(10)))print(show)

Python辞書の場合

  1. ラムダの本体は式であり、コードブロックではありません。ラムダ式にカプセル化できるのは、限られたロジックのみです。
  2. ラムダ関数には独自の名前名があり、パラメーターリストの外部またはグローバル名前名内のパラメーターにアクセスすることはできません。
  3. ラムダ関数は1行しか書き込めないように見えますが、CやC ++のインライン関数と同等ではありません。後者の目的は、小さな関数を呼び出すときにスタックメモリを占有しないようにして、操作効率を上げることです。

9.4 関数変数スコープ####

Pythonでは、プログラムの変数はどの場所からもアクセスできません。アクセス権限は、変数が割り当てられている場所によって異なります。変数のスコープによって、プログラムのどの部分がどの特定の変数名にアクセスできるかが決まります。スコープの合計は4つのタイプは次のとおりです。

検索は、次のルールに基づいています。つまり、ローカルで検索できない場合は、ローカルで検索します(クロージャーなど)。

g_count =0  #グローバルスコープ
def outer():
 o_count =1  #クロージャー機能外の機能内
 def inner():
  i_count =2  #ローカルスコープ
# 組み込みスコープは、builtinという名前の標準モジュールによって実装されますが、変数名自体は組み込みスコープに配置されないため、このファイルを使用するには、このファイルをインポートする必要があります。

関数内でグローバル変数を変更すると表示されます。グローバル変数と同じ名前の新しいローカル変数を作成し、それにグローバル変数の値を割り当てます。変更は実際にはローカル変数の値であり、グローバル変数の値は変更されていません。 。

ケース:機能範囲

#! /usr/bin/python3
# コード関数:グローバル変数とローカル変数変数

# msg変数はifステートメントブロックで定義されていますが、外部からアクセスできます
if True:
 msg ="I am from Weiyigeek"print("\nmsg変数はifステートメントブロックで定義されていますが、外部からアクセスできます:",msg)

def discount(price,rate):
 final_price = price * rate   #ローカル変数
 # print("これは、グローバル変数oldを出力しようとしています_価格の価値(間違った報告):",old_price)

 local_price =100    #関数で定義,それからそれはローカル変数です,外部からのアクセスはありません
 print("ローカル変数_price :",local_price)   # 100

 old_price =50print("古い関数で変更した後_価格の値は1です:",old_price)return final_price

old_price =float(input('元の価格を入力してください:'))
rate =float(input('控除率を入力してください: '))
new_price =discount(old_price,rate)print('関数外の古い変更_価格の値は2です:',old_price)print('割引価格:',new_price)

Python関数スコープの例

  1. 関数内のグローバル変数を変更しないようにし、グローバル変数の使用には注意してください。
  2. Pythonのモジュール、クラス、および関数(def、lambda)のみが新しいスコープを導入します。
  3. 他のコードブロック(if / elif / else /、try / exception、for / whileなど)は新しいスコープを導入しません。つまり、これらのステートメントで定義された変数には外部からもアクセスできます。
9.4.1 関数変数スコープキーワード######

説明:グローバル変数を保護するために、Pythonでは{Shadowing}が導入されています。内部スコープで外部スコープ変数を変更する場合は、グローバルキーワードと非ローカルキーワードを使用する必要があります。

グローバルおよび非ローカルキーワード:

globalキーワードは、定義された関数のグローバル変数を変更できます。ネストされたスコープ(囲みスコープ、外側の非グローバルスコープ)の変数を変更する場合は、nonlocalキーワードが必要です。

ケース:スコープキーワード

#! /usr/bin/python3
# 機能:グローバル変数スコープと非グローバルスコープ

""" global"""
num =1
def fun1():
 global num  #グローバルキーワード宣言を使用する必要があります
 print("global:",num,end=",") 
 num =123print(num,end=",")
 num +=133fun1()print(num)  
# global:1,123,256"""nonlocal"""
def outer():
 num =10
 def inner():
  nonlocal num   #非ローカルキーワード宣言
  num =100print("nonlocal:",num,end=" | ")
  num *=10.24inner()print(num,end=" | ")outer()print(num)  #グローバルキーワードが外部関数で使用されていないため、ここでの数値は変更されていません。
# nonlocal:100|1024.0|256

9.5 インライン関数とクロージャー####

Pythonの関数はインラインで定義および使用でき、グローバル変数が適用できない場合、クロージャーはより安定して安全であると見なすことができます。
前のすべての配列(array)= list(list)、tuple(tuple)などのコンテナー(container)

場合:

#! /usr/bin/python3
# 機能:埋め込まれた機能とクロージャーの使用

#""" 内蔵機能"""
def fun1():print("Fun1の主な機能が呼び出されます")
 def fun2():print("Fun2埋め込み関数が呼び出されています\n")fun2()  #内部機能(組み込み機能),fun1でのみ使用できます()転送

fun1()

#""" 閉鎖"""
def funX(x):
 def funY(y):return x * y
 return funY

i =funX(8)print("iのタイプ:",type(i))print("8 * 5 =",i(5)) #40xはすでにに割り当てられているので,後でyを与える=5."""
# に似ている:
def funX(x):
 def funY(y):return x * y
 returnfunY(2)>>>funX(3)6"""

#""" 高度なクロージャー(数字の配列と同様の方法で)--リスト(着信はアドレスです))"""
def demo1(arg):
 x =[arg]
 def demo2():
  # ローカル以外のキーワードを使用する
  x[0]**= x[0]  #このメソッドを使用して値を一覧表示します(**指数化)|ローカル変数を参照しないでください(Local variable),アレイを使用して、倉庫への暗い移行を行います.return x[0]returndemo2()print("2 ** 2 =",demo1(2),"  -  5 ** 5 =",demo1(5))

#""" 閉鎖の典型的なケース"""
def funA():
 x =5
 def funB():
  nonlocal x   #//xにローカル変数ではないことを示すように強制します
  x +=13return x 
 return funB

a =funA()  #初めて割り当てられたとき,再割り当てされていない限り,funA()リリースされませんでした,つまり、ローカル変数xは再初期化されません。
print("最初の呼び出し:",a(),"2番目の呼び出し:",a(),"3番目の呼び出し:",a())

Pythonの組み込み関数とクロージャー

Recommended Posts

two.mdを学習するPython3エントリ
Pythonエントリー学習教材
Four.mdを学習するPython3エントリ
three.mdを学習するPython3エントリ
Python3.mdの使用を開始する
Pythonエントリ-3
python学習ルート
パイソンリスト学習
Python関数の基礎学習
python_クローラーの基本的な学習
python_正規式学習
Pythonエントリチュートリアルノート(3)配列
Python正規表現クイックラーニング
PythonプログラミングPycharm高速学習
はじめにpython学習手順
Pythonマジック関数eval()学習
05.Pythonエントリ値ループステートメント
Pythonの正規表現学習の小さな例
Pythonの3日目の1行関数の学習
Pythonエントリーノート[基本的な文法(下記)]
入門から習熟までのPython(2):Pythonの概要
パイソンクローラー開発の学習パス
Python学習OSモジュールと使用法
Pythonの基礎を学ぶ2日間