Python函数强化练习(动态参数/不定长参数、关键字参数、变量作用域)

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

题目:写一个函数,检查传入列表的长度,如果大于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、例子:

     

# 动态参数/不定长参数    *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、例子:

    

 

【动态参数 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

 

 

 
 
 

 

posted on 2018-10-16 18:32  暖暖_8023  阅读(812)  评论(0编辑  收藏  举报

导航