本文:函数的强化练习,同时拓展动态参数/不定长参数、关键字参数、变量作用域

题目:写一个函数,检查传入列表的长度,如果大于2,那么只保留前两个长度的内容,并将新内容返回 

      

#步骤1:
L=[1,2,3,4]
if len(L)>2:
    new_list=L[0:2]
    print(new_list)

#步骤 2:
def check_list():
    L=[1,2,3,4]
    if len(L)>2:
        new_list=L[0:2]
        print(new_list)
    return new_list
#L=[1,2,3,4]
check_list()

#步骤 3:
def check_list(L):
    #L=[1,2,3,4]
    if len(L)>2:
        new_list=L[0:2]
        #print(new_list)
    return new_list
L=[1,2,3,4]         # 将写死的函数参数化
new_list=check_list(L)       # 函数调用后存值
print(new_list)

【一】动态参数/不定长参数

  1、符号:*args  ---argument  可以接收无穷多参数,必须加“*”号

  2、属性:1)不限制参数长度和个数  2)在函数内部是做为元组来传递,可以通过遍历获取单个元素

    3、例子:

     

python 不在某列里 python不定长列表_赋值

# 动态参数/不定长参数    *args
def make_sandwich(*args):
    all=''
    for item in args:
        all+=item
        all+='、'
    print('你的三明治包含了:'+all)

make_sandwich("牛肉",'火腿','培根','吐司')
make_sandwich()

 

【二】关键字参数

  1、符号:**kwargs  ---key word argument  ,必须加“**”号

  2、属性:1)实参调用需要指定参数与参数值  2)在函数内部是做为字典来传递

  3、例子:

    

python 不在某列里 python不定长列表_全局变量_02

 

【动态参数 or 关键字参数的细节使用】

#例子1:(动态参数接收参数数量无穷)

    def add_all_num(*L):
        sum=0
        for item in L:
            sum+=item
        print('和为:',sum)        #输出--和为: 10
    add_all_num(1,2,3,4)
-----------------------------------------------------------------------------------
#例子2:(动态参数已全部接收无法再赋值给a)

    def add_all_num(*L,a):
        sum=0
        for item in L:
            sum+=item
        print('和为:',sum)
        print('a的值',a)      #TypeError: add_all_num() missing 1 required keyword-only argument: 'a'
    add_all_num(1,2,3,4)

-----------------------------------------------------------------------------------
#例子3:(位置参数a指定被赋值输出)
    def add_all_num(*L,a):
        sum=0
        for item in L:       #遍历的是L
            sum+=item
        print('和为:',sum)        #输出--和为: 6
        print('a的值',a)          #输出--a的值 4
    add_all_num(1,2,3,a=4)
-----------------------------------------------------------------------------------
#例子4:(a优先赋值,其余给L)
    def add_all_num(a,*L):
        sum=0
        for item in L:      #遍历的是L
            sum+=item
        print('和为:',sum)            # 输出--和为: 9
        print('a的值',a)              # 输出--a的值 1
    add_all_num(1,2,3,4)
-----------------------------------------------------------------------------------
#例子5:(位置参数不可重复赋值,只接收一次)
    def add_all_num(a,*L):
        sum=0
        for item in L:
            sum+=item
        print('和为:',sum)
        print('a的值',a)             #TypeError: add_all_num() got multiple values for argument 'a'
    add_all_num(1,2,3,4,a=9)        #a已经赋值过不可以再赋值,只能接收一次
-----------------------------------------------------------------------------------
#例子6:(实参调用可以覆盖掉形参/位置参数的默认值)
    def add_all_num(a=9,*L):        #实参可以指定覆盖位置参数中的参数
        sum=0
        for item in L:
            sum+=item
        print('和为:',sum)        # 输出--和为: 9
        print('a的值',a)          # 输出--a的值 1
    add_all_num(1,2,3,4,)
-----------------------------------------------------------------------------------
#例子7:(关键字参数的使用)
    def add_all_num(a,*L,**kwargs):
        sum=0
        for item in L:      #遍历的是L
            sum+=item
        print('和为:',sum)            # 输出--和为: 2
        print('a的值',a)              # 输出--a的值 1
        print('kwargs',kwargs)      #输出--kwargs {'x': 3, 'y': 4}
    add_all_num(1,2,x=3,y=4)
-----------------------------------------------------------------------------------

【三】变量作用域

  1、分类:全局变量、局部变量

  2、属性:1)作用范围不一样

        2)全局:在模块里都能调用;局部:只能用于函数内

        3)当“全局”和“局部”同时存在,优先调用“局部”;当“局部变量”没有时,优先使用全局

        4)global关键字

  3、例子:

#例子1:
a=1         #全局变量
def add(b):
    global a    #声明a是个全局变量
    a=10     #赋值运算
    print(a+b)      # 20
add(10)
print(a)        #10
#-----------------------------------------------------
#例子2:
a=1         #全局变量
def add(b):
global a    #声明a是个全局变量
    a=b+5     #赋值运算
    print(a+b)      # 25
add(10)
print(a)        #15