# def my_abs(x): # if not isinstance(x,(int,float)):#参数类型做检查,只允许整数和浮点数类型的参数。数据类型检查可以用内置函数isinstance() # raise TypeError(‘错误的数据类型‘) # if x >= 0: # return x # else: # return -x # print(my_abs(-300)) # print(my_abs(‘abc‘)) # import math # def move(x,y,step,angle=0): # nx = x + step * math.cos(angle) # ny = y + step * math.sin(angle) # return nx,ny#返回值是一个tuple # print(move(100,70,60,math.pi/6)) # def nop(): # pass#pass可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让代码能运行起来 # print(nop()) #位置参数 # def add(x): # return x + 1 # print(add(1)) #默认参数 #一是必选参数在前,默认参数在后,否则Python的解释器会报错。 #当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。 # def power(x,n=2,y=6): # s = 1 # print(y) # while n > 0: # n = n - 1 # s = s * x # return s # print(power(5,2)) # print(power(10)) # print(power(5,y=200))#默认参数可以指定参数名称来传参,y参数用传进去的值,其他默认参数继续使用默认值。 # #定义默认参数要牢记一点:默认参数必须指向不变对象l=[],用l=None这个不变对象来代替l=[]。 # def arr(l=None): # if l is None: # l = [] # l.append(‘abc‘) # return l # print(arr()) #可变参数 # def calc(*numbers):#定义可变参数和定义一个list或tuple参数相比,仅仅在参数前面加了一个*号,函数内部,参数numbers接收到的是一个tuple,因此,函数代码完全不变 # sum = 0 # for num in numbers: # sum = sum + num * num # return sum # print(calc(1,2,3,4,5,6)) # print(calc())#调用该函数时,可以传入任意个参数,包括0个参数 # nums = [1,2,3,4,5,6,7,8,9] # print(calc(*nums))#*nums表示把nums这个list的所有元素作为可变参数传进去 #关键字参数 # def person(name,age,**kw):#关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict # print(‘name‘,name,‘age‘,age,‘other‘,kw) # person(‘傻狗1‘,100,city=‘傻狗2‘) # extra = {‘city‘:‘傻狗4‘,‘job‘:‘傻狗5‘} # person(‘傻狗3‘,200,**extra)#相当于person(‘傻狗3‘, 200, city=extra[‘city‘], job=extra[‘job‘]) #**extra表示把extra这个dict的所有key-value用关键字参数传入到函数的**kw参数,kw将获得一个dict,注意kw获得的dict是extra的一份拷贝,对kw的改动不会影响到函数外的extra。 #命名关键字参数 # def person(name,age,*,city,job):#命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数 # print(name,age,city,job) # person(‘傻狗1‘,100,city=‘傻狗3‘,job=‘傻狗4‘) # def person(name,age,*args,city=‘傻狗2‘,job):#如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了 # print(name,age,args,city,job) # arr = [1,2,3] # person(‘傻狗1‘,100,*arr,city=‘傻狗2‘,job=‘傻狗3‘) # person(‘傻狗1‘,100,*arr,job=‘傻狗3‘)#命名关键字参数city具有默认值,调用时,可不传入city参数 #参数组合 #可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数 # def person(name,age=100,*args,city,**kw): # print(name,age,args,city,kw) # arr = [1,2,3] # extra = {‘job1‘:‘傻狗3‘,‘job2‘:‘傻狗4‘} # person(‘傻狗1‘,200,*arr,city=‘傻狗2‘,**extra) # arr1 = [‘傻狗1‘,200,1,2,3] # extra1 = {‘city‘:‘傻狗2‘,‘job1‘:‘傻狗3‘,‘job2‘:‘傻狗4‘} # person(*arr1,**extra1)#对于任意函数,都可以通过类似func(*args, **kw)的形式调用它,无论它的参数是如何定义的 def product(*args): sum = 1 for num in args: sum = num * sum return sum arr = 1,2,3,4,5,6 print(product(*arr)) #默认参数一定要用不可变对象,如果是可变对象,程序运行时会有逻辑错误。 #*args是可变参数,args接收的是一个tuple。 #**kw是关键字参数,kw接收的是一个dict。 #可变参数既可以直接传入:func(1, 2, 3),又可以先组装list或tuple,再通过*args传入:func(*(1, 2, 3))。 #关键字参数既可以直接传入:func(a=1, b=2),又可以先组装dict,再通过**kw传入:func(**{‘a‘: 1, ‘b‘: 2})。
原文:https://www.cnblogs.com/xingxingclassroom/p/10861245.html