詳細のpython3ポイント機能(パラメータ、匿名関数、スコープ、グローバル変数とローカル変数)

記事の主な内容は、新人のチュートリアルへの参照を作りました

住所: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

 

おすすめ

転載: www.cnblogs.com/Luoters/p/11423904.html