Python 必选参数,默认参数,可变参数,关键字参数和命名关键字参数
Py的参数还真是多,用起来还是很方便的,这么多参数种类可见它在工程上的实用性还是非常广泛的。
挺有意思的,本文主要参照Liaoxuefeng的Python教程。
#必选参数 def quadratic(a, b, c): if not isinstance(a, (int, float)) or not isinstance(b, (int, float)) or not isinstance(c, (int, float)): raise TypeError('bad operand type') if a == 0: return -c / b else: return (math.sqrt(b * b - 4 * a * c) - b)/ 2.0 / a, ( - math.sqrt(b * b - 4 * a * c) - b)/ 2.0 / a print(quadratic(2, 3, 1)) print(quadratic(1, 3, -4)) def pow(x, n = 2): s = 1 while(n): n -= 1 s *= x return s print(pow(2,5)) def add_end(L = []): L.append('End') return L print(add_end()) print(add_end()) def add_end(L = None): if L is None: L = [] L.append('End') return L print(add_end()) print(add_end()) #可变参数 def calc(*nums): sum = 0 for i in nums: sum += math.pow(i, 2) return sum num = [1,2] print(calc(1,2)) print(calc(*num)) #关键字参数 """关键字参数有什么用?它可以扩展函数的功能。""" """比如,在person函数里,我们保证能接收到name和age这两个参数,""" """但是,如果调用者愿意提供更多的参数,我们也能收到。""" """试想你正在做一个用户注册的功能,除了用户名和年龄是必填项外,其他都是可选项,""" """利用关键字参数来定义这个函数就能满足注册的需求。""" def person(name, age, **kw): print('name:', name, 'age:', age, 'others:', kw) if 'School'in kw: print("有School 信息") person("李金旭", 11, School = ['Neu','Swun'], Contry = 'China') #命名参数 '''如果要限制关键字参数的名字,就可以用命名关键字参数, 例如,只接收city和job作为关键字参数。这种方式定义的函数如下:''' def person(name, age, *, city, job): print(name, age, city, job) person("李金旭", 11, city = ['Neu','Swun'], job = 'China') def person(name, age, *argv): print(name, age, argv) person("李金旭",11,'Neu') def person(name, age, *, city, job): print(name,"is", age," years old in ", city, "as a ",job) person("李金旭",11,city = "Bejing", job = "IT front to end Engineer") #参数组合 ''' 在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。 但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。 ''' ''' *args是可变参数,args接收的是一个tuple; **kw是关键字参数,kw接收的是一个dict。 ''' def func1(a, b, c = 0, *argv, **kw): print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw) def func2(*argv, **kw): print(argv, kw) args = (1,2,3,4) kw = {'Name':'李金旭', 'Age': 11} func2(args, kw)
哎,论文还没看完,又搞了半天这些乱七八糟的。。。烦