建设在线观看视频网站,建网站优势,做一个综合商城网站多少钱,uc浏览器手机网页版Python定义函数非常简单#xff0c;而且具有很高的灵活度。函数的参数传递方式多种多样。需要记忆和理解。 1.位置参数#xff1a; 举例#xff0c; def power(x): return x * x power#xff08;x#xff09;函数中#xff0c;x就是一个位置参数。调用时#xff0c;必须…Python定义函数非常简单而且具有很高的灵活度。函数的参数传递方式多种多样。需要记忆和理解。 1.位置参数 举例 def power(x): return x * x powerx函数中x就是一个位置参数。调用时必须传入一个参数x。 2.默认参数 举例 def power(x, n2): s 1 while n 0: n n - 1 s s * x return s 当我们调用的时候第二个参数会默认为2。例如使用power5的时候会默认计算5的平方。要计算5的三次方只需要调用power5,3即可。 使用时注意必选参数在前默认参数在后。当函数有多个参数时将变化大的参数放在前面变化小的放在后面。变化小的可以作为默认参数。 3.可变参数 顾名思义可变参数就是传入的参数个数是可变的可以是1个、2个到任意个还可以是0个。 举例 def calc(numbers):sum 0 for n in numbers: sum sum n * n return sum 但是调用的时候需要先组装出一个list或tuple calc([1, 2, 3]) output 14 如果利用可变参数调用函数的方式可以简化成这样 calc(1, 2, 3)
14 calc(1, 3, 5, 7) 84 在参数前加一个*可以将参数改变。使得number接收到的是一个元组。使调用函数时可以传入N个参数。包括0个 def calc(*numbers):sum 0 for n in numbers: sum sum n * n return sum 如果已经有一个list或者tuple如nums [1, 2, 3] 可以使用calc(nums[0], nums[1], nums[2])或者calc(*nums) *nums表示把nums这个list的所有元素作为可变参数传进去。这种写法相当有用而且很常见。 4.关键字参数 关键字参数允许你传入0个或任意个含参数名的参数这些关键字参数在函数内部自动组装为一个dict。 举例 def person(name, age, **kw):print(name:, name, age:, age, other:, kw)函数person除了必选参数name和age外还接受关键字参数kw。在调用该函数时可以只传入必选参数也可以只传入任意个数的关键字参数 person(Michael, 30)
name: Michael age: 30 other: {}或者 person(Bob, 35, cityBeijing)
name: Bob age: 35 other: {city: Beijing} person(Adam, 45, genderM, jobEngineer) name: Adam age: 45 other: {gender: M, job: Engineer}和可变参数类似也可以先组装出一个dict然后把该dict转换为关键字参数传进去 extra {city: Beijing, job: Engineer} person(Jack, 24, cityextra[city], jobextra[job]) name: Jack age: 24 other: {city: Beijing, job: Engineer}简化的写法: extra {city: Beijing, job: Engineer} person(Jack, 24, **extra) name: Jack age: 24 other: {city: Beijing, job: Engineer} **extra表示把extra这个dict的所有key-value用关键字参数传入到函数的**kw参数kw将获得一个dict注意kw获得的dict是extra的一份拷贝对kw的改动不会影响到函数外的extra。5.命名关键字函数对于关键字参数函数的调用者可以传入任意不受限制的关键字参数。至于到底传入了哪些就需要在函数内部通过kw检查。举例我们需要检查city和job参数 def person(name, age, **kw):if city in kw: # 有city参数 pass if job in kw: # 有job参数 pass print(name:, name, age:, age, other:, kw) 但是调用者仍可以传入不受限制的关键字参数 person(Jack, 24, cityBeijing, addrChaoyang, zipcode123456)上面可以看出我们传入的zipcode并不在参数内但是也当做other处理了。因为我们在if后面没有做操作。 如果要限制关键字参数的名字就可以用命名关键字参数例如只接收city和job作为关键字参数。这种方式定义的函数如下 def person(name, age, *, city, job):print(name, age, city, job)和关键字参数**kw不同命名关键字参数需要一个特殊分隔符**后面的参数被视为命名关键字参数。 调用方式如下 person(Jack, 24, cityBeijing, jobEngineer) Jack 24 Beijing Engineer 如果函数定义中已经有了一个可变参数后面跟着的命名关键字参数就不再需要一个特殊分隔符*了 def person(name, age, *args, city, job):print(name, age, args, city, job)命名关键字参数必须传入参数名这和位置参数不同。如果没有传入参数名调用将报错 person(Jack, 24, Beijing, Engineer)
Traceback (most recent call last):File stdin, line 1, in module
TypeError: person() takes 2 positional arguments but 4 were given % 由于调用时缺少参数名city和jobPython解释器把这4个参数均视为位置参数但person()函数仅接受2个位置参数。 命名关键字参数可以有缺省值从而简化调用 def person(name, age, *, cityBeijing, job): print(name, age, city, job) 由于命名关键字参数city具有默认值调用时可不传入city参数 person(Jack, 24, jobEngineer)
Jack 24 Beijing Engineer 参数组合 在Python中定义函数可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数这5种参数都可以组合使用。但是请注意参数定义的顺序必须是必选参数、默认参数、可变参数、命名关键字参数和关键字参数。 比如定义一个函数包含上述若干种参数 def f1(a, b, c0, *args, **kw): print(a , a, b , b, c , c, args , args, kw , kw) def f2(a, b, c0, *, d, **kw): print(a , a, b , b, c , c, d , d, kw , kw) 在函数调用的时候Python解释器自动按照参数位置和参数名把对应的参数传进去。 f1(1, 2)
a 1 b 2 c 0 args () kw {} f1(1, 2, c3) a 1 b 2 c 3 args () kw {} f1(1, 2, 3, a, b) a 1 b 2 c 3 args (a, b) kw {} f1(1, 2, 3, a, b, x99) a 1 b 2 c 3 args (a, b) kw {x: 99} f2(1, 2, d99, extNone) a 1 b 2 c 0 d 99 kw {ext: None} 通过一个tuple和dict也可以调用上述函数 args (1, 2, 3, 4) kw {d: 99, x: #} f1(*args, **kw) a 1 b 2 c 3 args (4,) kw {d: 99, x: #} args (1, 2, 3) kw {d: 88, x: #} f2(*args, **kw) a 1 b 2 c 3 d 88 kw {x: #} 所以对于任意函数都可以通过类似func(*args, **kw)的形式调用它无论它的参数是如何定义的。 转载于:https://www.cnblogs.com/daidong805/p/9147676.html