写函数,函数可以支持接收任意数字(位置传参)并将所有数据相加并返回.
def my_sum(*args): s = 0 for i in args: s += i return sprint(my_sum(1, 3, 5, 7, 4, 5)) # 25
习题2看代码写结果
def func(): return 1, 2, 3val = func()print(type(val) == tuple)print(type(val) == List)
习题3结果:
True
False
看代码写结果
def func(*args, **kwargs): pass# a.请将执行函数,并实现让args的值为(1, 2, 3, 4)func(1, 2, 3, 4)# b.请将执行函数,并实现让args的值为([1, 2, 3, 4],[11, 22, 33])func([1, 2, 3, 4], [11, 22, 33])# c.请将执行函数,并实现让args的值为([11, 22], 33)且kwargs的值为{'k1': 'v1', 'k2': 'v2'}func([11, 22], 33, k1='v1', k2='v2')# d.如执行func(*{'武沛齐', '金鑫', '女神'}),请问args和kwargs的值分别为?# 答:args的值为:'武沛齐', '金鑫', '女神' kwargs的值为:{}# e.如执行func({'武沛齐', '金鑫', '女神'},[11, 22, 33]),请问args和kwargs的值分别为?# 答:args的值为:{'武沛齐', '金鑫', '女神'},[11, 22, 33] kwargs的值为:{}# f.如执行func('武沛齐', '金鑫', '女神',[11, 22, 33], {'k1': '栈'}),请问args和kwargs的值分别为?# 答:args的值为:'武沛齐', '金鑫', '女神',[11, 22, 33], {'k1': '栈'} kwargs的值为:{}
习题4看代码写结果
def func(name, age=19, email='[email protected]'): pass# a.执行func('alex'),判断是否可执行,如可以请问name、age、email的值分别是?# 答:name:'alex' age:19 email:'[email protected]'# b.执行func('alex', 20),判断是否可执行,如可以请问name、age、email的值分别是?# 答:name:'alex' age:20 email:'[email protected]'# c.执行func('alex', 20, 30),判断是否可执行,如可以请问name、age、email的值分别是?# 答:name:'alex' age:20 email:30# d.执行func('alex',email='[email protected]'),判断是否可执行,如可以请问name、age、email的值分别是?# 答:name:'alex' age:19 email:'[email protected]'# e.执行func('alex',email='[email protected]', age=99),判断是否可执行,如可以请问name、age、email的值分别是?# 答:name:'alex' age:99 email:'[email protected]'# f.执行func(name='alex', 99),判断是否可执行,如可以请问name、age、email的值分别是?# 答:不能执行,因为关键字参数不能再位置参数之前!# g.执行func(name='alex', 99, [email protected]),判断是否可执行,如可以请问name、age、email的值分别是?# 答:不能执行,因为关键字参数不能再位置参数之前!
习题5看代码写结果
def fun(users, name): users.append(name) return usersresult = fun(['武沛齐', '李杰'], 'alex')print(result)
习题6结果:
['武沛齐', '李杰', 'alex']
看代码写结果
def func(v1): return v1 * 2def bar(arg): return '%s 是什么玩意?' % argval = func('你')data = bar(val)print(data)
结果:
你你 是什么玩意?
看代码写结果
def func(v1): return v1 * 2def bar(arg): msg = '%s 是什么玩意?' % arg print(msg)val = func('你')data = bar(val)print(data)
习题8结果:
你你 是什么玩意?
None
看代码写结果
v1 = '武沛齐'def func(): print(v1)func()v1 = '老男人'func()
习题9结果:
'武沛齐'
'老男人'
看代码写结果
v1 = '武沛齐'def func(): v1 = '景女神' def inner(): print(v1) v1 = '肖大侠' inner()func()v1 = '老男人'func()
习题10结果:
肖大侠
肖大侠
看代码写结果
def func(): data = 2 * 2 return datanew_name = funcval = new_name()print(val)# 注意:函数类似于变量,func代指一块代码的内存地址
习题11结果:
4
看代码写结果
def func(): data = 2 * 2 return datadata_List = [func, func, func]for item in data_List: v = item() print(v)# 注意:函数类似于变量,func代指一块代码的内存地址
习题12结果:
4
4
4
看代码写结果(函数可以做参数进行传递)
def func(arg): arg()def show(): print('show函数')func(show)
习题13结果:
'show函数'
写函数,接收n个数字,求这些参数数字的和.(动态传参)
def my_sum(*args): s = 0 for i in args: s += i return snums = input('选择要相加的数字以空格隔开:')result = nums.split()for index in range(len(result)): result[index] = int(result[index])print(my_sum(*result)) # 16
习题14读代码,回答:代码中打印出来的值a,b,c分别是什么?为什么
a = 10b = 20def test5(a, b): print(a, b)c = test5(b, a)print(c)
习题15结果:
a: 20 b: 10 c: None在执行c = test5(b, a)的时候,传入的参数a: 10, b: 20执行是c = test5(20, 10),虽然形参def test(a, b)写着a在前面,但是这不影响实参传值,形参可以写任意名字跟接收实参,对值不影响,所以打印出来是a: 20, b: 10.
在看看c的值,c值接收的是函数的返回值,在没有设置返回值的时候,函数默认是返回None所以值是c: None
读代码,回答:代码中打印出来的值a、b、c分别是什么?为什么?
a = 10b = 20def test5(a, b): a = 3 b = 5 print(a, b)c = test5(b, a)print(c)
习题16结果:
a: 3, b: 5, c: None首先执行函数c = test(20,10)的时候,在执行函数test5(a, b)的时候这时候a: 20, b: 10;但是接着就执行a = 3, b = 5,这会导致a,b的原来指向断开,a指向了3,b指向了5.所以a: 3, b: 5
其次在函数执行完毕的时候没有设置返回值,那么就是默认返回值即是None.所以c: None
传入函数中多个列表和字典,如何将每个列表的每个元素依次添加到函数的动态参数args里面?如何将每个字典的所有键值对添加到kwargs里面?
依照如下例子所示即可:
def fun(*args, **kwargs): print(args) print(kwargs)fun(*[3, 5, 7, 9], **{'name': '小明', 'age': 18, 'gender': 'male'})#运行结果# (3, 5, 7, 9)# {'name': '小明', 'age': 18, 'gender': 'male'}
习题17写函数,接收两个数字参数,将较小的数字返回.
def my_min(*args): result = args[0] for i in args: if i < result: result = i return resultnums = input('输入2个数字以空格隔开:')result = nums.split()for index in range(len(result)): result[index] = int(result[index])print(my_min(*result))# 运行结果:# 输入2个数字以空格隔开:1 3# 1# 输入2个数字以空格隔开:4 2 8 4 2 3 4# 2
习题18写函数,接收一个参数(此参数类型必须是可迭代对象),将可迭代对象的每个元素以'_'相连接,形成新的字符串并返回.
from collections.abc import IterableList1 = []def my_serIEs(temp: Iterable): try: if isinstance(temp, Iterable): for i in temp: if isinstance(i, (int, float, bool)): List1.append(str(i)) elif isinstance(i, str): List1.append(i) else: my_serIEs(i) except Exception as e: print(e) finally: return '_'.join(List1)print(my_serIEs([3, ['Mi', {'Guo': '果'}, {3.33, 'bye'}], 4, 'hello', {'name': '小丽', 1: 2}, (3, 6, False, 4.4)]))# 3_Mi_Guo_bye_3.33_4_hello_name_1_3_6_False_4.4
习题19有如下函数
添加任意代码使inner函数可被执行
def wrapper(): def inner(): print(666)wrapper()
def wrapper(): def inner(): print(666) inner()wrapper()
习题20相关面试题:
写出下列代码结果:
def foo(a, b, *args, c, sex=None, **kwargs): print(a, b) print(c) print(sex) print(args) print(kwargs)# foo(1, 2, 3, 4, c=6)# a: 1# b: 2# c: 6# sex:None# args:(3, 4)# kwargs:{}# foo(1, 2, sex='男', name='alex', hobby='old_loman')# c没有参数导致运行出错# foo(1, 2, 3, 4, name='alex', sex='男')# c没有参数导致运行出错# foo(1, 2, c=18)# a: 1# b: 2# c: 18# sex:None# args:()# kwargs:{}# foo(2, 3, [1, 2, 3], c=13, hobby='喝茶')# a: 2# b: 3# c: 13# sex:None# args:([1, 2, 3],)# kwargs:{'hobby': '喝茶'}# foo(*[1, 2, 3, 4], **{'name': '太白', 'c': 12, 'sex': '女'})# foo(1, 2, 3, 4, name='太白', c=12, sex='女')# a: 1# b: 2# c:12# sex:'女'# args:(3, 4)# kwargs:{'name': '太白'}
总结 以上是内存溢出为你收集整理的python习题,关于函数的练习02全部内容,希望文章能够帮你解决python习题,关于函数的练习02所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)