微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

20201022-Python学习笔记9.3

 

位置参数:

计算x的平方的函数

>>> def power(x):
...     return x * x
...
>>> power(3)
9
>>> power(88)
7744
>>>

对于power(x)函数,参数x就是一个位置参数。

当我们调用power函数时,必须传入一个有且仅有的一个参数x:

把power(x)修改为power(x,n),用来计算x的n次方

def power(x,n):
	s = 1
	while n > 0:
		n = n - 1
		s = s * x
	return s

  

>>> from q3 import power
>>> power(2,3)
8
>>> power(3,3)
27
>>> power(2,4)
16
>>>

修改后的power(x,n)函数有两个参数:x和n,这两个参数都是位置参数,调用函数时,传入的两个值按照位置顺序依次赋给参x和n。

认参数

缺少参数n,报错

>>> power(9)
Traceback (most recent call last):
  File "<stdin>",line 1,in <module>
TypeError: power() missing 1 required positional argument: 'n'
>>>

这个时候,认参数就派上用场了。由于我们经常计算x2,所以,完全可以把第二个参数n的认值设定为2:

 

def power(x,n=2):
	s = 1
	while n > 0:
		n = n - 1
		s = s * x
	return s

  只输入一个参数时,第二个参数认为2,可计算出结果。

>>> from q3 import power
>>> power(9)
81
>>> power(9,2)
81
>>> power(9,4)
6561
>>>

  

设置认参数时,需要注意:

1、必选参数在前,认参数在后,否则Python的解释器会报错

(思考一下为什么认参数不能放在必选参数前面)

2、如何设置认参数。

函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为认参数。

使用认参数最大的好处是能降低调用函数的难度

 

例子1:

def enroll(name,gender):
	print('name:',name)
	print('gender:',gender)

  

>>> from q3 import enroll
>>> enroll('wf','t')
name: wf
gender: t
>>>

例子2:

def enroll(name,gender,age=6,city='luoyang'):
	print('name:',gender)
	print('age:',age)
	print('city:',city)

  

>>> from q3 import enroll
>>> enroll('ww','f','5')
name: ww
gender: f
age: 5
city: luoyang
>>> enroll('ww','f')
name: ww
gender: f
age: 6
city: luoyang
>>> enroll('ww','3','shanghai')
name: ww
gender: f
age: 3
city: shanghai
>>> enroll('ww','city=beijing')
name: ww
gender: f
age: city=beijing
city: luoyang
>>> enroll('ww',city='beijing')
name: ww
gender: f
age: 6
city: beijing
>>>

  后两个为认参数,前两个参数可变,后两个参数没有提供时使用认值。可以按顺序传入认参数,不按顺序时需把参数名加上

例子3:

def add_end(L=[]):
	L.append('END')
	return L

  

>>> add_end([1,2,3,4])
[1,4,'END']
>>> add_end()
['END']
>>> add_end()
['END','END']
>>> add_end()
['END','END','END']
>>>

  

Python函数在定义的时候,认参数L的值就被计算出来了,即[],因为认参数L也是一个变量,它指向对象[],每次调用函数,如果改变了L内容,则下次调用时,认参数的内容就变了,不再是函数定义时的[]了。

认参数必须指向不变对象

修改例子3:

def add_end(L=None):
	if L is None:
		L = []
	L.append('END')
	return L

  

>>> from q3 import add_end
>>> add_end()
['END']
>>> add_end()
['END']
>>> add_end()
['END']
>>> add_end([1,'END']
>>>

  程序设计时,尽量设计为不变参数。

可变参数

可变参数就是传入的参数个数是可变的,可以是1个,也可以是多个,也可以0个

例子,计算a的平方+b的平方+c的平方+d的+。。。

调用的时候,需要先组装一个list或tuple

def cacl(numbers):
	sum = 0
	for n in numbers:
		sum = sum + n * n
	return sum

  

>>> from q3 import cacl
>>> cacl([1,3])
14
>>> cacl((1,3))
14
>>> 

利用可变参数,进行简化。把函数的参数改为可变参数。

def cacl(*numbers):
	sum = 0
	for n in numbers:
		sum = sum + n * n
	return sum

  

>>> from q3 import cacl
>>> cacl(1,4)
30
>>> cacl(1,3)
14
>>> cacl(1)
1
>>> cacl()
0
>>>

定义可变参数和定义一个list或tuple参数相比,仅仅在参数前面加了一个*号。在函数内部,参数numbers接收到的是一个tuple,因此,函数代码完全不变。但是调用函数时,可以传入任意个参数,包括0个参数。

如果已经有一个list或者tuple,要调用一个可变参数可以这样做

>>> nums = [1,3]
>>> cacl(nums[0],nums[1],nums[2])
14

Python 允许你在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去:

>>> nums = [1,3]
>>> cacl(*nums)
14
>>>

*nums表示把nums这个list的所有元素作为可变参数传进去

关键字参数

可变参数允许你传入0个或任意个参数,这些可变参数在函数调用自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数函数内部自动组装为一个dict。

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐