1、写函数,接受n个数字,求这些参数数字的和。(动态传参)
def sum(*args): val = 0 for i in args: val = i+val return val
2、读代码,回答:代码中,打印出来的值a, b, c分别是什么?为什么?
a = 10
b = 20
def test(a, b):
print(a, b)
c = test(b,a)
print(c)
a = 20, b = 10 , c = None
因为函数中没有return, 因此返回的是None
3、读代码,回答:代码中,打印出来的值a, b, c分别是什么?为什么?
a = 10
b = 20
def test(a, b):
a = 3
b = 5
print(a, b) #a =3,b =5
c = test(b,a)
print(c) #c=None
print(a, b) #a = 10 , b = 20
a = 10 b = 20, c =None
4、写函数, 传入函数中多个实参(均为可迭代对象如字符串,列表,元组,集合等)
将每个实参的每个元素依次添加到函数的动态传参args里面
eg:传入函数两个参数【1,2,3】(22,33)最终args为(1,2,3,22,33)
1 list = [1,2,3] 2 tuple = (22,33) 3 def test(*args): 4 print(args) 5 test(*list,*tuple)
5、写函数,传入函数中多个实参,将每个实参的键值对依次添加到函数的动态参数kwargs里面。
1 dic = {"张三":25,"李四":24,"王五":23} 2 dic1 = {"张三1":215,"李四1":124,"王五1":213} 3 def test(**kwargs): 4 print(kwargs) 5 test(**dic,**dic1)
6、下面代码成立么?如果不成立为什么报错?怎么解决?
6.1
a = 2
def wrapper():
print(a)
wrapper()
##成立
6.2
a = 2
def wrapper():
a += 1
print(a)
wrapper()
##不成立,因为函数中的a是全局变量,不能直接赋值,需要在函数中输入global a 代码
6.3
def wrapper():
a = 1
def inner():
print(a)
inner()
wrapper()
##成立,看没问题,改的话就会报错
6.4
def wrapper():
a = 1
def inner():
a += 1
print(a)
inner()
wrapper()
##报错,因为直接在函数内的函数修改上外面函数的变量,因此在内部函数中添加 nonlocal a 代码即可
7、写函数,接受两个数字参数,将较小的数字返回
1 def my_min(a, b): 2 return a if a > b else b 3 mmin = my_min(103,203) 4 print(mmin)
8、接受一个参数(必须是可迭代对象),将每个元素以“_”相连接,形成新的字符串,并返回
eG:传入的可迭代对象为[1,"python", "sun wu kong "]返回的结果为'1_python_sun wu kong '
def func(it): result = "" for el in it: result += str(el) + "_" return result[:-1] print(func([1,"asd","23"]))
9、写函数,传入n个数,返回字典{‘max’:最大值,'min':最小值}
def func(*n): return {"最大值":max(n),"最小值":min(n)}
10、写函数,传入一个参数n,返回n的阶乘
def cal(n): if n == 1: return n return n * cal(n-1) print(cal(3))
11、写函数,返回一个扑克牌列表,里面有52项,每一项是一个元组
def puke(): hua = ["红心","梅花","黑桃","方块"] dian = ["A","2","3","4","5","6","7","8","9","10","J","Q","K"] result = [] for huase in hua: for dianshu in dian: result.append((huase,dianshu)) return result
12、有如下函数:
def wrapper():
def inner():
print(666)
inner()
wrapper()
用两种以上的方式,执行inner()函数
## 第一种 def wrapper(): def inner(): print(666) inner() wrapper() ## 第二种 def wrapper(): def inner(): print(666) return inner fn = wrapper() fn()
13、相关面试题
1、有函数定义如下:
def calc(a, b, c, d=1, e=2):
return (a+b)*(c-d)+e
请分别写出下列标号代码的输出结果,如果出错请写出Error。
print(calc(1,2,3,4,5))## (1+2)*(3-4)+5
print(calc(1,2)) ## Error
print(calc(e=4,c=5,a=2,b=3)) ## (2+3)*(5-1)+4
print(calc(1,2,3)) ## (1+2)*(3-1)+2
print(calc(1,2,3,e=4)) ## (1+2)*(3-1)+4
print(calc(1,2,3,d=5,4)) ##Error
2、(此题有坑)下面代码打印的结果分别是 ##
def extendList(val,list=[]): ## 默认值在内存中只会产生一份,(地址)
list.append(val)
return list
list1 = extendList(10) ## 默认值地址列表
list2 = extendList(123,[]) ## 产生新的地址列表
list3 = extendList("a") ## 默认值地址列表,既 list1 和 list 3 相同
print("list1=%s"%list1) ## list1 = ["10","a"]
print("list2=%s"%list2) ## list2 = ["123"]
print("list3=%s"%list3) ## list3 = ["10","a"]
测试 ## print(id(list1))
## print(id(list3))
14、写代码完成99乘法表(升级题)
for i in range(1,10): for j in range(1,i+1): print("%s*%s=%s"%(i,j,i*j),end="") print() ##print()默认值end = "\n"