Python関数関連の注意事項

関数:

反復コードを関数にカプセル化し、コードのモジュール性を強化し、コードの再利用率を高めます。

フォーマット:
def 函数名([参数]):
    函数体(重复的代码)

注:キーワードdef 2を使用する必要があります:関数本体インデント3に注意してください:関数本体()バインディング

定義関数:乱数生成
import random


def generate_random():

    for in in range(10):
    
        ran = random.randint()
            
        print(ran)
print(generate_random)


実行:function generate_random at 0x000001390F096280 #関数アドレスが括弧で囲まれている場合、関数全体が直接実行されます

呼び出し:関数は関数を見つけて、関数本体のコンテンツを実行します
generate_random()
16
18
5
15
12
6
10
20
3
10

機能:パラメータ付き

    定义:
        def 函数名(参数):
            函数体
        调用
            pass        
乱数のパラメータを渡す
import random


def generate_random(number): #形参 
    for i in range(number):
        ran = random.randint(1,20)
        print(ran)

generate_random(5) #实参 赋值
キーワード:isinstance
判断是什么类型
print (isistance(2,int) #判断2是不是整型 返回值False , True
True 
可変および不変:
可变:地址不变里面内容改变 list dict set
不可变:只要内容改变,必须改变地址 int str float tuple frozenset
可変関数と不変関数のパスパラメーター:
   def add(name,*args):
    sum = 0
    if len(args) > 0:
        for i in args:
            sum += i
        print('%s累加和是:sum:%s' % (name,sum))
    else:
        print("没有元素可计算,sum:" , sum)

add('狒狒',5,8,6,9)


运行结果:
    狒狒累加和是:sum:28

可変パラメータは後ろに配置する必要があります

可変パラメーター+キーワードパラメーター
キーワードパラメータ:key = value
    def add(a,b=10):
        result = a+ b
        print(result)
    
    add(5)
    
定義辞書
students = {
    
    '001':('蔡徐坤',21),'002':('王源',19),'003':('王俊凯',20),'004':('易烊千玺',19)}

def print_boy(persons):
    if isinstance(persons,dict):
        values = persons.values()
        print(values)
        for name,age in values:
            print('{}的年龄是:{}'.format(name,age))

print_boy(students)
*****************************
F:\code\venv\Scripts\python.exe F:/code/Study/day_20201228.py
dict_values([('蔡徐坤', 21), ('王源', 19), ('王俊凯', 20), ('易烊千玺', 19)])
蔡徐坤的年龄是:21
王源的年龄是:19
王俊凯的年龄是:20
易烊千玺的年龄是:19
ペアバリューコール
def func(**kwargs): # key word argument
    print (a,b,c)
#调用
func(a=1 , b=2 ,c =3) #关键字参数

{'a': 1, 'b': 2, 'c': 3} #字典形式保存
def aa(a,b,*c,**d):
    print(a,b,c,d)

aa(1,2)
**********************
1 2 () {}

*タプル**ディクショナリの有無にかかわらず*パラメータあり

可変パラメータ演習
def func(a,*args):
print(a,args)

func(2,3,4,5) 
print('******************************')
func(2,[1,2,3,4])      
print('******************************')
func(2,3,[1,2,3,4,5]) 
print('******************************')
func(5,6,(4,5,6),9)

2 (3, 4, 5)
******************************
2 ([1, 2, 3, 4],)
******************************
2 (3, [1, 2, 3, 4, 5])
******************************
5 (6, (4, 5, 6), 9)


可変スコープ:
a = 5  # 这是一个全局变量

def hello():
    a = 1  # a在这里是局部变量.
    print("函数内是局部变量 : ", a)
    return a

hello()
print("函数外是全局变量 : ", a)

演算結果
関数はローカル変数:1
関数の外側はグローバル変数:5

グローバル
如果想要在函数内部用模块定义的变量的话,就需要用到global关键字
a = 5

def hello():
    global a
    # 声明告诉执行引擎用的是全局变量a
    a = 1
    print('In test func: a = %d' % a)

hello()
print('Global a = %d' % a)

実行結果:
テスト関数内:a = 1
グローバルa = 1
グローバル変数aが関数で正常に変更されていることがわかります

ローカル変数とグローバル変数

ローカル変数:
函数内部声明的变量,局部变量
def func():
    s= 'abc' #局部变量

グローバル変数:
声明在函数外层是全局的,所有函数都可以访问
name = '月月' #全局变量
def func():
    pass
ループネスティング
name = '月月'
def func():
    s = 'abc'
    s += 'x'
    print(s,name)

def func1():
    global name
    print(name)
    name += "会弹吉他"
    print('func1修改后的name是:',name)

func()

func1()

func()

#输出结果:
abcx 月月

月月
func1修改后的name是: 月月会弹吉他

abcx 月月会弹吉他


グローバル変数が不変関数で変更されている場合は、グローバルキーワードを追加する必要があります。グローバル変数が不十分な場合は、関数で変更するときにキーワードを追加する必要はありません。

内部機能:

機能:外部変数にアクセスでき、
内部関数は外部関数の変数変数を
変更でき非ローカルキーワードは不変変数を変更できます

def func():
    n=5 #局部变量
    list = [5,3,6,15,12] 
    def inner_func():
        nonlocal n
        for index, i in enumerate(list):
            list[index] = i+n
            list.sort()
        n +=100
    inner_func()
    print(list,n)
func()
デフォルトパラメータ
 end = ''  #缺省参数
 sep= "  "

再帰関数

再帰関数とは

以前の調査を通じて、関数が他の関数を呼び出すことができることがわかりました。
関数が他の関数を内部的に呼び出すのではなく、それ自体を呼び出す場合、この関数は再帰関数です。

再帰関数の役割

たとえば、階乗n!= 1 * 2 * 3 *…* nを計算してみましょう。

解決策1:ループを使用して完了します

def cal(num):
    result,i = 1,1
    while i <= num:
        result *= i
        i+= 1
    return result

print(cal(3))

階乗の法則を参照してください
1! = 1
2! = 2 × 1 = 2 × 1!
3! = 3 × 2 × 1 = 3 × 2!
4! = 4 × 3 × 2 × 1 = 4 × 3!
...
n! = n × (n-1)!

解決策2:再帰を使用して
def factorial(num):
    result = 1
    if num == 1:
        return 1
    result = num * factorial(num -1)
    return result
print(cal(3))

原理

[外部リンク画像の転送に失敗しました。ソースサイトにヒル防止リンクメカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします(img-lABD7H68-1611304292725)(A0E4505279B6419FB2030A6E32066326)]

匿名関数

ラムダキーワードを使用して、小さな無名関数を作成します。この関数の名前は、defを使用して関数を宣言するための標準的な手順が省略されていることに由来しています。

ラムダ関数の構文には、次のように1つのステートメントしか含まれていません。

lambda 参数列表: 运算表达式

次の例:

sum = lambda arg1, arg2: arg1 + arg2
# 调用sum函数
print("Value of total : %d" % sum( 10, 20 ))
print("Value of total : %d" % sum( 20, 20 ))

上記の例の出力:

Value of total :  30
Value of total :  40

Lambda関数は任意の数のパラメーターを受け取ることができますが、式の値のみを返すことができます

匿名関数は任意の式(印刷関数も含む)を実行できますが、一般に、式には戻り値の計算結果が必要であると考えられています。

Pythonは、一部の実行スクリプトを作成するときにラムダを使用できるため、サーバーを管理するための単純なスクリプトの作成など、関数を定義するプロセスを受け入れることができます。

応募機会
パラメータとして渡される関数
>>> def fun(a, b, opt):
...     print("a = " % a)
...     print("b = " % b)
...     print("result =" % opt(a, b))
...
>>> add = lambda x,y:x+y
>>> fun(1, 2, add)  # 把 add 作为实参传递
a = 1
b = 2
result = 3

おすすめ

転載: blog.csdn.net/weixin_45767577/article/details/112988715