記事の主な内容は、新人のチュートリアルへの参照を作りました
住所:https://www.runoob.com/python3/python3-function.html
あなたは自分自身の機能は、以下の簡単なルールで関数を定義することもできます。
- 機能ブロックで DEF 名と機能識別子括弧が続く、キーワードを開始 () 。
- 括弧内のすべての受信パラメータ及び引数はパラメータを定義するために使用することができる括弧の間、中央に配置されなければなりません。
- 最初の文関数は、選択的に説明文字列を使用することができます - 機能命令を格納するため。
- 機能の内容コロンを起動し、インデント
- 戻る[式] エンド機能は、選択的に呼び出し元に値を返します。Noneを返すための発現同等ずに返します。
あなたは(変更可能)を変更することができますし、(不変)のオブジェクトを変更することはできません
繰り返し割り当て1.変数のみを割り当て後に、同じ名前の新しい変数を生成したものを覚えているだろう、元の変数が削除されます。変数は、オブジェクトへの参照のみであるため、すべてが、オブジェクトとして機能することができます。
そして、割り当てや変数の他の変数型のリストは、変数の値を変更することです繰り返します。
パラメータタプルが値によって渡されるように渡された2不変型数値、文字列は、それ自体を変更しないと、変数の型のリスト、パラメータとして渡された辞書のセットは、参照によって渡され、それ自体が変更されます。
パラメータ
パラメータなければならない、キーワードのパラメータ、デフォルトパラメータ、可変長パラメータ:4つのパラメータがあります。
呼の数必要と同じ文:パラメータが必要です。プリントミー()関数を呼び出し、パラメータを渡す必要があります、または構文エラーが発生します。
キーワード引数は:呼び出しの順序は、数は、宣言の時と異なっている必要があります。
デフォルトパラメータ:DEF PRINTINFO (名前、年齢= 35 ):
可変長パラメータ:アスタリスクを追加 パラメータはタプル(タプル)として導入され*、およびすべての変数無名のパラメータのストレージ。プラス2つのアスタリスク **パラメータは、辞書として導入されます。
実施例1(シングル*)
#!は/ usr / binに/のpython3の #の書き込み可能な機能説明 DEFの PRINTINFO(引数1、* vartuple): " すべての着信パラメータ印刷" 印刷(" 出力:" ) 印刷(ARG1) 印刷(vartuple) #のコールPRINTINFO機能 PRINTINFOを(70、60、50)
結果:
出力: 70 ( 60,50)
例2(2 *)
#!/usr/bin/python3 # 可写函数说明 def printinfo( arg1, **vartuple ): "打印任何传入的参数" print ("输出: ") print (arg1) print (vartuple) # 调用printinfo 函数 printinfo( 70, a=60, b=50 )
执行结果:
输出: 70 {‘a’:60,'b':50}
匿名函数
python 使用 lambda 来创建匿名函数。
语法:
变量=lambda [arg1 [,arg2,.....argn]]:expression
实例
#!/usr/bin/python3 # 可写函数说明 sum = lambda arg1, arg2: arg1 + arg2 # 调用sum函数 print ("相加后的值为 : ", sum( 10, 20 )) print ("相加后的值为 : ", sum( 20, 20 ))
执行结果:
相加后的值为 : 30
相加后的值为 : 40
变量作用域
规则:局部作用域可以访问全局作用域,全局作用域不可以访问局部作用域。
而局部作用域想修改全局作用域时,要使用关键字global; 如果要修改嵌套作用域(enclosing 作用域,外层作用域)时,则需要 nonlocal 关键字了
Python的作用域一共有4种:
- L (Local) 局部作用域
- E (Enclosing) 闭包函数外的函数中
- G (Global) 全局作用域
- B (Built-in) 内置作用域(内置函数所在模块的范围)
以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内置中找。
g_count = 0 # 全局作用域 def outer(): o_count = 1 # 闭包函数外的函数中 def inner(): i_count = 2 # 局部作用域
内置作用域是通过一个名为 builtin 的标准模块来实现的,但是这个变量名自身并没有放入内置作用域内,所以必须导入这个文件才能够使用它。在Python3.0中,可以使用以下的代码来查看到底预定义了哪些变量:
>>> import builtins >>> dir(builtins)
Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问,如下代码:
>>> 場合はTrue: ... MSG = ' 私はRunoobから' ... >>> MSG ' 私はRunoobから来ました' >>>
メッセージ変数はブロック場合の例で定義されているが、まだ外にアクセスできるようにしています。
MSGは、関数内で定義されている場合、それはローカル変数ではなく、外部からのアクセスは以下のとおりです。
>>> defのテスト(): ... msg_inner = ' 私はRunoobから来ました' ... >>> msg_inner トレースバック(最新の呼び出しの最後): ファイル" <STDIN> "、行1、で、<モジュール> NameError:名前「msg_innerは」 され ていない定義されて >>>
グローバル変数とローカル変数
これは、ローカルスコープを有するものとして定義され、関数の外に定義された変数の関数内のグローバルスコープを有します。
ローカル変数は、そのアクセス関数内で宣言することができ、プログラム全体の範囲内でグローバル変数にアクセスすることができます。関数を呼び出すときに、関数名の中に宣言されたすべての変数がスコープに追加されます。
栗の場合:
#!のpython3を/ usr / binに/ 合計 = 0 #をこのグローバル変数である #書き込み可能な機能説明 DEF SUM(ARG1、ARG2): # 。二つのパラメータと「返し 合計=引数1 + arg2の#合計をここに断片的です変数 印刷(「関数がローカル変数である:」、トータル) を返す合計 #はsum関数の呼び出し 合計(10、20がある) を印刷(「外部関数は、グローバル変数である:」、トータル)
結果:
関数内ローカル変数:30
外部関数は、グローバル変数である:0
グローバルとローカル以外のキーワード
あなたは内部変数のスコープ外の範囲を変更したい場合は1、グローバルとローカル以外のキーワードを使用する必要があります。
栗の場合:
#!は/ usr / binに/のpython3
num = 1 def fun1(): global num # 需要使用 global 关键字声明 print(num) num = 123 print(num) fun1() print(num)
执行结果:
1 123 123
如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字了,如下栗子:
#!/usr/bin/python3 def outer(): num = 10 def inner(): nonlocal num # nonlocal关键字声明 num = 100 print(num) inner() print(num) outer()
执行结果:
100 100
2.修改 a 为全局变量,通过函数参数传递,可以正常执行输出结果为:
#!は/ usr / binに/のpython3 A = 10 デフテスト(A): A = A + 1枚の プリント(a)は テスト(A)
結果:
11