从零开始,一起学python3(四)一一 函数

今天我们来聊聊python里的函数。要注意的地方其实挺多的,一点点慢慢梳理。

首先,让我们来看看python的函数长什么样?

定义

# 定义一个函数
def my_func(a):
    a += 1
    return a

注意函数的开头用的是def 而不是其他语言的function,第一行的结尾有个冒号,然后这里还要注意一个就是函数式没有{}这种括号的,python怎么去判断语句是否属于这个函数呢?它是用缩进来判断的,所以在写的时候注意好缩进。

这个函数里面具体的内容,这边不详细说,后面会说到。

调用

# 调用函数
print(my_func(2))

调用非常简单。

但是需要注意的是,如果参数的数量不对,运行的时候会报错。

返回值

返回值可以有一个、多个,也可以没有。

返回值为1个的时候就不说了,多个返回值的情况如下:

# 多个返回值
def my_multy(x):
    y = x+1
    z = x-1
    return y,z

r = my_multy(3)
print(r)

执行的结果为:

(4, 2)

也就是说,当返回多个值的时候,其实是以tuple也就是元组的形式返回的。

那如果不写返回值呢?

# 不写返回值
def none_return():
    pass
x = none_return()
print(x)

执行的结果为:

None

也就是说,不写返回值的话,默认会返回None,当然你也可以手动返回None

参数

这一块最复杂,东西比较多,但是很重要。

位置参数

位置参数就是我们平常遇到的最多的参数了,调用的时候数量必须和定义的参数数量一致,否则会报错。这个比较简单,没什么好说的。

默认参数

默认参数就是定义函数的时候给参数设置一个默认值,调用函数的时候如果没有给这个参数,函数就会自动调用这个默认值,比如:

# 默认参数
def default_param(a,b=3):
    return a + b
x = default_param(1)
print(x)

执行的结果为:

4

 这里引申一个概念,可变参数和不可变参数

可变参数有:列表、集合、字典

不可变参数有:数字、字符串、元组

默认参数必须用不可变参数!如果用可变参数,会出问题,比如:

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

结果为:

 原因是函数在定义的时候,这个默认参数的值已经计算出来了,并且给了一个指向,这个指向是不变的,但是这个指向的内容,一直在改变

可变参数

可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple

用法:

定义:

# 可变参数
def calc(*numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum

调用:

print(calc(1,2,3))

a = [1,2,3]
print(calc(*a))

a = (1,2,3)
print(calc(*a))

关键字参数

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

用法:

定义:

# 关键字参数
def person(name, age, **kw):
    print('name:', name, 'age:', age, 'other:', kw)

调用:

a = {'weight':130,'height':175}
person('sun',27,**a)

person('sun',27,weight=130,height=175)

执行结果:

 命名关键字参数

如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收cityjob作为关键字参数。这种方式定义的函数如下:

定义:

# 命名关键字参数
def person2(name, age, *, city, job):
    print(name, age, city, job)

调用:关键字参数只能是city和job

调用:

person2('Jack', 24, city='Beijing', job='Engineer')

b = {'city':'Beijing', 'job':'Engineer'}
person2('Jack', 24, **b)

参数组合的顺序

参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数

比如:

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

def f2(a, b, c=0, *, d, **kw):
    print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)

注意:

对于任意函数,都可以通过类似func(*args, **kw)的形式调用它,无论它的参数是如何定义的,比如:

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

def f2(a, b, c=0, *, d, **kw):
    print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)
def f3(a, b, c=0):
    print('a =', a, 'b =', b, 'c =', c)

a = (1,2,3)
b = {'name':'sun','weight':130}
c = {'d':8,'name':'sun','weight':130}
f1(*a,**b)
f2(*a,**c)
f3(*a)

执行结果为:

内置函数举例

python有很多内置函数,我们碰到了就记一下。

求绝对值函数

# 求绝对值函数
print(abs(10)) #10
print(abs(-28)) #28

求最大值函数

# 求最大值函数
print(max(1,-3,10)) #10

数据类型转换函数

# 数据类型转换函数
print(int('1111')) #1111
print(str(12.3)) #'12.3'
print(bool(1)) #True

猜你喜欢

转载自www.cnblogs.com/littlesky123/p/12402016.html
今日推荐