10 练习题:形参 命名空间

# 1.写函数,函数可以支持接收任意数字(位置传参)并将所有数据相加并返回。
def sum(*args):
    s = 0
    for i in args:
        s += i
    return s



# 2.看代码写结果
# def func():
#     return 1, 2, 3
#
# val = func()
# print(type(val) == tuple)
# print(type(val) == list)

# result:
# True
# False



# 3.看代码写结果
def func(*args, **kwargs):
    print(args)
    print(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的值分别是?
# result:
# args: ('武沛齐', '金鑫',' 女神')
# kwargs: {}
# e. 如执行 func({'武沛齐','金鑫','女神'},[11,22,33]),请问 args和kwargs的值分别是?
# result:
# args: ({'武沛齐', '金鑫', '女神'}, [11, 22, 33])
# kwargs: {}
# f. 如执行 func('武沛齐','金鑫','女神',[11,22,33],**{'k1':'栈'}),请问 args和kwargs的值分别是?
# result:
# args: ('武沛齐', '金鑫', '女神',[11, 22, 33])
# kwargs: {'k1':'栈'}



# 4.看代码写结果
def func(name, age=19, email='123@qq.com'):
    pass

# a. 执行 func('alex') ,判断是否可执行,如可以请问 name、age、email 的值分别是?
# result:可以执行
# name: 'alex'
# age: 19
# email: '123@qq.com'
# b. 执行 func('alex',20) ,判断是否可执行,如可以请问 name、age、email 的值分别是?
# result:可以执行
# name: 'alex'
# age: 20
# email: '123@qq.com'
# c. 执行 func('alex',20,30) ,判断是否可执行,如可以请问 name、age、email 的值分别是?
# result:可以执行
# name: 'alex'
# age: 20
# email: 30
# d. 执行 func('alex',email='x@qq.com') ,判断是否可执行,如可以请问 name、age、email 的值分别是?
# result:可以执行
# name: 'alex'
# age: 19
# email: 'x@qq.com'
# e. 执行 func('alex',email='x@qq.com',age=99) ,判断是否可执行,如可以请问 name、age、email 的值分别是?
# result:可以执行
# name: 'alex'
# age: 99
# email: 'x@qq.com'
# f. 执行 func(name='alex',99) ,判断是否可执行,如可以请问 name、age、email 的值分别是?
# result:不可执行,实参位置参数应该放在前面
# g. 执行 func(name='alex',99,'111@qq.com') ,判断是否可执行,如可以请问 name、age、email 的值分别是?
# result:不可执行,实参位置参数应该放在前面



# 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)

# result: 你你 是什么玩意?



# 7.看代码写结果
def func(v1):
    return v1 * 2

def bar(arg):
    msg = "%s 是什么玩意?" % (arg,)
    print(msg)

val = func('你')
data = bar(val)
print(data)

# result:
# 你你 是什么玩意?
# None



# 8.看代码写结果
# v1 = '武沛齐'
#
# def func():
#     print(v1)
#
# func()
# v1 = '老男人'
# func()

# result:
# '武沛齐'
# '老男人'



# 9.看代码写结果
# v1 = '武沛齐'
#
# def func():
#     v1 = '景女神'
#     def inner():
#         print(v1)
#     v1 = '肖大侠'
#     inner()
#
# func()
# v1 = '老男人'
# func()

# result:
# '肖大侠'
# '肖大侠'



# 10.看代码写结果【可选】
# def func():
#     data = 2 * 2
#     return data
#
# new_name = func
# val = new_name()
# print(val)
# 注意:函数类似于变量,func代指一块代码的内存地址。

# result: 4



# 11.看代码写结果【可选】
# def func():
#     data = 2 * 2
#     return data
#
# data_list = [func, func, func]
# for item in data_list:
#     v = item()
#     print(v)
# 注意:函数类似于变量,func代指一块代码的内存地址。

# result:
# 4
# 4
# 4



# 12.看代码写结果(函数可以做参数进行传递)【可选】
#
# def func(arg):
#     arg()
#
# def show():
#     print('show函数')
#
# func(show)

# result: 'show函数'



# 13.写函数,接收n个数字,求这些参数数字的和。(动态传参)
def sum(*args):
    s = 0
    for i in args:
        s += i
    return s



# 14.读代码,回答:代码中, 打印出来的值a, b, c分别是什么?为什么?
# a = 10
# b = 20
#
# def test5(a, b):
#     print(a, b)
#
# c = test5(b, a)
# print(c)

# result:
# 20 10
# None



# 15.读代码,回答:代码中, 打印出来的值a, b, c分别是什么?为什么?
# a = 10
# b = 20
#
# def test5(a, b):
#     a = 3
#     b = 5
#     print(a, b)
#
# c = test5(b, a)
# print(c)

# result:
# 3 5
# None



# 16.传入函数中多个列表和字典, 如何将每个列表的每个元素依次添加到函数的动态参数args里面?如何将每个字典的所有键值对依次添加到kwargs里面?
# result: 传参时将列表放在前面,字典放在后面,利用**完成字典的传参



# 17.写函数, 接收两个数字参数, 将较小的数字返回.
def minor(d_1, d_2):
    return d_1 if d_1 < d_2 else d_2



# 18.写函数, 接收一个参数(此参数类型必须是可迭代对象), 将可迭代对象的每个元素以’_’相连接, 形成新的字符串, 并返回.
# 例如 传入的可迭代对象为[1, '老男孩', '武sir'] 返回的结果为’1_老男孩_武sir’
# def connect_iterable(iterable):
#     list = []
#     for element in iterable:
#         list.append(str(element))
#     return '_'.join(list)



# 19.有如下函数:
# def wrapper():
#     def inner():
#         print(666)
#     inner()
#
# wrapper()
# 你可以任意添加代码, 执行inner函数.
# 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)

# a.foo(1,2,3,4,c=6)
# result:
# 1 2
# 6
# None
# (3, 4)
# None

# foo(1,2,sex='男',name='alex',hobby='old_woman')
# result:
# 不能执行,没有完成 c 的传参

# c.foo(1,2,3,4,name='alex',sex='男')
# result:
# 不能执行,没有完成 c 的传参

# d.foo(1,2,c=18)
# result:
# 1 2
# 18
# None
# None
# None

# e.foo(2, 3, [1, 2, 3],c=13,hobby='喝茶')
# result:
# 2 3
# 13
# None
# ([1, 2, 3],)
# {hobby: '喝茶'}

# foo(*[1, 2, 3, 4],**{'name':'太白','c':12,'sex':'女'})
# result:
# 1 2
# 12
# 女
# (3, 4)
# {'name': '太白'}

posted @ 2020-07-08 11:38  Raigor  阅读(169)  评论(0)    收藏  举报