函数
调用一个函数,可以通过help(abs)查看abs函数的帮助信息
>>> abs(100)
100
>>> abs(-20)
20
>>> abs(12.34)
12.34
很多时候会报出TypeError的错误,平且Python会告诉你:abs()有且仅有一个参数,但给出了两个:
>>> abs(1, 2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: abs() takes exactly one argument (2 given)
如果传入的参数数量是对的,但参数类型不能被函数所接受,也会报TypeError的错误,并且给出错误信息:str是错误的参数类型:
>>> abs('a')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: bad operand type for abs(): 'str'
而max函数max()可以接收任意多个参数,并返回最大的那个:
>>> max(1, 2)
2
>>> max(2, 3, 1, -5)
3
Python内置的常用函数还包括数据类型转换函数,比如int()函数可以把其他数据类型转换为整数:
>>> int('123')
123
>>> int(12.34)
12
>>> float('12.34')
12.34
>>> str(1.23)
'1.23'
>>> str(100)
'100'
>>> bool(1)
True
>>> bool('')
False
函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,相当于给这个函数起了一个“别名”:
>>> a = abs # 变量a指向abs函数
>>> a(-1) # 所以也可以通过a调用abs函数
1
函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回。因此,函数内部通过条件判断和循环可以实现非常复杂的逻辑。
如果没有return语句,函数执行完毕后也会返回结果,只是结果为None。return None可以简写为return。
请注意,函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回。因此,函数内部通过条件判断和循环可以实现非常复杂的逻辑。
如果没有return语句,函数执行完毕后也会返回结果,只是结果为None。return None可以简写为return。
在Python交互环境中定义函数时,注意Python会出现...的提示。函数定义结束后需要按两次回车重新回到>>>提示符下
如果想定义一个什么事也不做的空函数,可以用pass语句
def nop():
pass
pass可以用来作为占位符
pass还可以用在其他语句里,比如:
if age=>18
pass
参数检查:
调用函数时,如果参数个数不对,Python解释器会自动检查出来,并抛出TypeError:
>>> my_abs(1, 2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: my_abs() takes 1 positional argument but 2 were given
参数类型不对,Python解释器没办法检查,当传入了不恰当的参数时,内置函数abs会检查出参数错误,而我们定义的my_abs没有参数检查,会导致if语句出错,出错信息和abs不一样。所以,这个函数定义不够完善。所以说数据类型检查可以用内置函数isinstance()实现:
def my_abs(x):
if not isinstance(x, (int, float)):
raise TypeError('bad operand type')
if x >= 0:
return x
else:
return -x
算x的n次方
def power(x, n):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
把年龄和城市设为默认参数:
def enroll(name, gender, age=6, city='Beijing'):
print('name:', name)
print('gender:', gender)
print('age:', age)
print('city:', city)
这样,大多数学生注册时不需要提供年龄和城市,只提供必须的两个参数:
>>> enroll('Sarah', 'F')
name: Sarah
gender: F
age: 6
city: Beijing
只有与默认参数不符的学生才需要提供额外的信息
enroll('Bob', 'M', 7)
enroll('Adam', 'M', city='Tianjin')
def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)
命名关键字参数city具有默认值,调用时,可不传入city参数:
>>> person('Jack', 24, job='Engineer')
Jack 24 Beijing Engineer
学生名单列表:
import random
def get_name(n,*a):
if len(a)<n:
raise ValueError('n不能超过名单名字数')
a = list(a)
strs = ''
for i in range(n):
name = a.pop(random.randrange(len(a)))
strs+=name+','
return strs.strip(',')
print(get_name(4,'马大哈','王小明','张天宇','李明'))
计算n个数的乘积
def mul(*x):
if len(x)==0:
raise TypeError('hello world')
else:
for ii in x:
if not isinstance(ii,(int,float)):
raise TypeError('hello world')
n = 1
for i in x:
n = n*i
return n
print(mul())

浙公网安备 33010602011771号