函数

调用一个函数,可以通过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语句,函数执行完毕后也会返回结果,只是结果为Nonereturn None可以简写为return

请注意,函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回。因此,函数内部通过条件判断和循环可以实现非常复杂的逻辑。

如果没有return语句,函数执行完毕后也会返回结果,只是结果为Nonereturn 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())
 
posted @ 2021-08-24 08:56  来自苏格兰  阅读(43)  评论(0)    收藏  举报