# 1. 写函数,函数可以支持接收任意数字(位置传参)并将所有数据相加并返回。
def sum_add(*args):
sum = 0
for l in args:
try:
sum +=l
except TypeError: #捕捉异常 如果是其他类型相加会报错 直接不执行 继续循环
pass
return sum
s = sum_add(1,'3',2)
# 2. 看代码写结果
# def func():
# return 1,2,3
# val = func()
print( type(val) == tuple )
print( type(val) == list )
"""
1.返回一个元组 val=(1,2,3)
2.True
3.False
"""
# 3. 看代码写结果
# def func(*args,**kwargs):
# pass
# # a. 请将执行函数,并实现让args的值为 (1,2,3,4)
# def func(*args,**kwargs):
# return args
# print(func(1,2,3,4))
# # b. 请将执行函数,并实现让args的值为 ([1,2,3,4],[11,22,33])
def func(*args,**kwargs):
return args
print(func([1,2,3,4],[11,22,33]))
# # c. 请将执行函数,并实现让args的值为 ([11,22],33) 且 kwargs的值为{'k1':'v1','k2':'v2'}
def func(*args,**kwargs):
return args,kwargs
print(func([11,22],33,k1='v1',k2='v2'))
# # d. 如执行 func(*{'武沛齐','金鑫','女神'}),请问 args和kwargs的值分别是?
"""
args = ('武沛齐','金鑫','女神')
kwargs = None {}
"""
def func(*args,**kwargs):
return args,kwargs
print(func(*{'武沛齐','金鑫','女神'}))
# # e. 如执行 func({'武沛齐','金鑫','女神'},[11,22,33]),请问 args和kwargs的值分别是?
"""
args = ({'武沛齐','金鑫','女神'},[11,22,33])
kwargs = {} None
"""
def func(*args,**kwargs):
return args,kwargs
a,b= func({'武沛齐','金鑫','女神'},[11,22,33])
print(a)
print(b)
# # f. 如执行 func('武沛齐','金鑫','女神',[11,22,33],**{'k1':'栈'}),请问 args和kwargs的值分别是?
"""
args = (('武沛齐','金鑫','女神'),[[11,22,33]])
kwargs = {'k1':'栈'}
"""
def func(*args,**kwargs):
return args,kwargs
a,b = func('武沛齐','金鑫','女神',[11,22,33],**{'k1':'栈'})
print(a)
print(b)
# 4. 看代码写结果
# def func(name,age=19,email='123@qq.com'):
# pass
# # a. 执行 func('alex') ,判断是否可执行,如可以请问 name、age、email 的值分别是?
"""
可以执行
name = 'alex'
age =19
email = '123@qq.com'
"""
# # b. 执行 func('alex',20) ,判断是否可执行,如可以请问 name、age、email 的值分别是?
"""
可以执行
name = 'alex'
age =20
email = '123@qq.com'
"""
# # c. 执行 func('alex',20,30) ,判断是否可执行,如可以请问 name、age、email 的值分别是?
"""
可以执行
name = 'alex'
age =20
email = 30
"""
# # d. 执行 func('alex',email='x@qq.com') ,判断是否可执行,如可以请问 name、age、email 的值分别是?
"""
可以执行
name = 'alex'
age =19
email = 'x@qq.com'
"""
# # e. 执行 func('alex',email='x@qq.com',age=99) ,判断是否可执行,如可以请问 name、age、email 的值分别是?
"""
可以执行
name = 'alex'
age =99
email = 'x@qq.com'
"""
# # f. 执行 func(name='alex',99) ,判断是否可执行,如可以请问 name、age、email 的值分别是?
"""
不行,位置参数必须第一个 报错:SyntaxError: positional argument follows keyword argument
"""
# # g. 执行 func(name='alex',99,'111@qq.com') ,判断是否可执行,如可以请问 name、age、email 的值分别是?
"""
不行,位置参数必须第一个 报错:SyntaxError: positional argument follows keyword argument
"""
# 5. 看代码写结果
# def func(users,name):
# users.append(name)
# return users
# result = func(['武沛齐','李杰'],'alex')
# print(result)
"""
result = ['武沛齐','李杰','alex']
"""
# 6. 看代码写结果
# def func(v1):
# return v1* 2
# def bar(arg):
# return "%s 是什么玩意?" %(arg,)
# val = func('你')
# data = bar(val)
# print(data)
"""
'你你 是什么玩意?'
"""
# 7. 看代码写结果
# def func(v1):
# return v1* 2
# def bar(arg):
# msg = "%s 是什么玩意?" %(arg,)
# print(msg)
# val = func('你')
# data = bar(val)
# print(data)
"""
'你你 是什么玩意?'
None
"""
# 8. 看代码写结果
# v1 = '武沛齐'
# def func():
# print(v1)
# func()
# v1 = '老男人'
# func()
"""
'武沛齐'
'老男人'
"""
# 9. 看代码写结果
# v1 = '武沛齐'
# def func():
# v1 = '景女神'
# def inner():
# print(v1)
# v1 = '肖大侠'
# inner()
# func()
# v1 = '老男人'
# func()
"""
'肖大侠'
'肖大侠'
原因:
1、函数外的v1 是全局变量,在全局作用域中
2.函数内的v1 是局部变量,在局部作用域中
3.函数内又嵌套了函数inner(),它内部定义print(v1),打印的变量的地址 是指向父级函数func中的v1,如果父级中没有此变量会继续向外调用,直到没找到报错。
4.在func函数里调用了inner()函数,在调用之前v1又重新赋值了,由'景女神'变成了肖大侠
5.在全局作用域中,经过了2次调用函数func()。结果都为'肖大侠''肖大侠'
"""
# 10. 看代码写结果【可选】
# def func():
# data = 2*2
# return data
# new_name = func
# val = new_name()
# print(val)
# # 注意:函数类似于变量,func代指一块代码的内存地址。
"""
4
"""
# 11. 看代码写结果【可选】
# def func():
# data = 2*2
# return data
# data_list = [func,func,func]
# for item in data_list:
# v = item()
# print(v)
# # 注意:函数类似于变量,func代指一块代码的内存地址。
"""
4
4
4
原因:
1.列表中 存储的都是函数func的内存地址
2.当循环开始时,依次把func内存地址又指向给了item.
3.item相当于函数func,所以它可以指向调用 并 返回值给v
4.结果循环了3次 并打印了3次4
"""
# 12. 看代码写结果(函数可以做参数进行传递)【可选】
# def func(arg):
# arg()
# def show():
# print('show函数')
# func(show)
"""
show函数
原因:
我们其实在func函数体中调用了函数show
"""