百万年薪python之路 -- 函数的动态参数练习

时间:2023-03-08 22:17:37

1.继续整理函数相关知识点。

2.写函数,接收n个数字,求这些参数数字的和。(动态传参)

def func(*args,**kwargs):
    num_sum = 0
    num_dic = []
    num = args
    num_dic = list(kwargs.values())
    for i in num:
        num_sum += i
    for j in num_dic:
        num_sum += j
    return  num_sum

res = func(1,2,3,4,5,6,a=1,b=5,c=4)
print(res)

3.读代码,回答:代码中,打印出来的值a,b,c分别是什么?为什么?

 a=10
 b=20
 def test5(a,b):
    print(a,b)
 c = test5(b,a)
 print(c)
20 10       #因为test5的形参传过来的a = 20,b = 10
None        # test5因为没有return,所以返回None

4.读代码,回答:代码中,打印出来的值a,b,c分别是什么?为什么?

a=10
b=20
def test5(a,b):
   a=3
   b=5
   print(a,b)
c = test5(b,a)
print(c)
3 5     #因为在test5中a和b属于局部变量,分别被赋值3和5
None    # test5因为没有return,所以返回None

5.传入函数中多个列表和字典,如何将每个列表的每个元素依次添加到函数的动态参数args里面?如何将每个字典的所有键值对依次添加到kwargs里面?

def func(*args,**kwargs):
    print(args,kwargs)

tu = (1,2,3,4,5,6)
dic = {"k1":1,"k2":2,"k3":3}
func(*tu,**dic)

6.下面代码成立么?如果不成立为什么报错?怎么解决?
6.1

 a = 2
 def wrapper():
     print(a)
 wrapper()

 结果:
 2

6.2

 a = 2
 def wrapper():
     a += 1
     print(a)
 wrapper()

 结果:
 报错     因为wrapper函数里没有a这个变量,所以无法自增      在wrapper函数里设置global a

6.3

def wrapper():
     a = 1
     def inner():
         print(a)
     inner()
wrapper()

结果:
1

6.4

def wrapper():
     a = 1
     def inner():
         a += 1
         print(a)
     inner()
 wrapper()

7.写函数,接收两个列表,将列表长度比较小的列表返回.

def func(lst1,lst2):
    return lst1 if len(lst1) < len(lst2) else lst2

print(func([1,2,3,4,5],[6,7,8]))

8.写函数,接收一个参数(此参数类型必须是可迭代对象),将可迭代对象的每个元素以’ _’相连接,形成新的字符串,并返回.
例如 传入的可迭代对象为[1,'老男孩','宝元']返回的结果为’1 _老男孩 _宝元’

def func(s):
    lst = []
    for i in s:
        lst.append(str(i))
    return "_".join(lst)

print(func((1,'老男孩','宝元')))

9.有如下函数:

def wrapper():
     def inner():
         print(666)
wrapper()

你可以任意添加代码,执行inner函数.

def wrapper():
    def inner():
        print(666)
    return inner()

wrapper()

10.补充代码,可以使以下的代码可以运行

a = 10
def func():

    a += 1
    print(a)
func()
a = 10
def func():
    global a
    a += 1
    print(a)

func()