0%

python 方法

定义函数

在python中定义函数使用def语句,依次写出函数名,参数,函数体,返回值等。

1
2
3
4
5
def my_abs(x):
if x >= 0:
return x
else:
return -x

如果还没有想好函数体,那么可以使用pass占位符来让代码先运行起来

1
2
3
4
5
def my_abs(x):
if x >= 0:
return x
else:
pass

注意:缺少了pass,什么都没有会报错的

参数

参数在定义函数的时候会声明,对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就可以了。python的函数定义非常简单,但非常灵活。除了正常定义的必选的参数外,还可以使用默认参数、可变参数和关键字参数。

必填参数

必选参数不可不传,不传的话会报错

1
my_abs() # 报错

默认参数

默认参数可以简化函数的调用,但是必须要注意:

  • 必选参数在前,默认参数在后
  • 变化大的默认参数在前,变化小的默认参数在后
  • 默认对象必须指向不变对象
1
2
3
def enroll(name, gender, age = 6, city = 'beijing'):
print(name + ' is in ' + city)
print(enroll('tony', 'three'))

可以按照默认的顺序来提供参数,也可以不按照默认顺序,这时候需要把参数名称写上去。

1
2
3
def enroll(name, gender, age = 6, city = 'beijing'):
print(name + ' is in ' + city)
print(enroll('tony', 'three'), city='jiangsu')

可变参数

可变参数,传入的参数是可变的,可以是0到任意个。

1
2
3
4
5
6
def number_sum(*nums):
sum = 0
for num in nums:
sum += num
return sum
print(number_sum(1, 2, 3, 6, 7)) # 19

如果已经有一个list或tuple了,传给一个可变参数只需要在list或tuple之前加个*就可以了。

1
2
nums = [1, 2, 3, 6, 7]
print(number_sum(*nums)) # 同上 19

*nums这种方式表示吧这个list的所有元素作为可变参数传进去。

关键字参数

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

1
2
3
4
def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)
print(person('tony', 30, city='beijing', job='coder'))
# 'name:', 'tony', 'age:', 30, 'other:', {'city': 'beijing', 'job': 'coder'}

上面函数调用也可写为:

1
print(person('tony', 30, {'city': 'beijing', 'job': 'coder'}))

命名关键字参数

类似于关键字参数,都可以传递不受限制的参数,但命名关键字参数可以接受限定的参数

1
2
def person(name, age, *, city, job):
print(name, age, city, job)

在关键字参数dirct里面,只接收city和job两个键的值。命名关键字参数必须传入参数名,如果没有参数名,就报错。

参数组合

在python中,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,可以组合使用,但是,参数定义顺序必须是:必选参数、默认参数、可变参数、命名关键字参数、关键字参数

1
2
def f1(a, b, c=0, *args, **kw):
print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)

通过一个tuple和dict,可以调用任何形式的参数:

1
2
3
4
5
6
7
8
>>> 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': '#'}

返回值

正常的函数的返回值是一个,但是这里要特别说明的是,python中可以返回多个值。

1
2
3
4
5
6
7
8
import math
def move(x, y, step, angle=0):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny
x, y = move(100, 100, 60, math.pi / 6)
print(x, y)
# (151.96152422706632, 70.0)

其实,函数返回的是一个tuple,仍然是一个单一的值,而在语法上,多个变量可以同时接收一个tuple。

1
2
a, b = ([1, 2])
print(a, b) # a:1, b:2
码字辛苦,打赏个咖啡☕️可好?💘