Python def函数

  • 注:函数的内容称为函数体,函数体是多条python语句组成的

简单的一个print函数

In [25]: def myfunc():
    ...:     for i in range(3):
    ...:        print("煤煤是小乖猫")
    ...:

# 效果
In [26]: myfunc()
煤煤是小乖猫
煤煤是小乖猫
煤煤是小乖猫

传入参数

In [27]: def myfunc(name):
    ...:     for i in range(3):
    ...:         print(f"i love {name}.")
    ...:

# 效果
In [28]: myfunc("煤煤")
i love 煤煤.
i love 煤煤.
i love 煤煤.

# 传参 并 指定次数
In [30]: myfunc("煤煤", 5)
i love 煤煤.
i love 煤煤.
i love 煤煤.
i love 煤煤.
i love 煤煤.

数学运算(return 会直接返回结果 后面不在执行)

# 第一种写法
In [31]: def div(x,y):
    ...:     z = x / y
    ...:     return z
    ...:

In [32]: div(4,2)
Out[32]: 2.0


# 第二种写法(比较方便)
In [33]: def div(x,y):
    ...:     return x / y
    ...:

In [34]: div(4,2)
Out[34]: 2.0


# 优化增加判断(除数不能为0)
In [36]: def div(x,y):
    ...:     if y == 0:
    ...:         return "除数不能为0!"
    ...:     else:
    ...:         return x / y
    ...:

In [37]: div(4,2)
Out[37]: 2.0

In [38]: div(4,0)
Out[38]: '除数不能为0!'

位置参数:定位

In [42]: def myfunc(s, vt, o):
    ...:     return "".join((o, vt, s))
    ...:

# 指定参数运行,返回的数值join是反过来的,所以结果就是反的
In [45]: myfunc("我","亲了","煤煤")
Out[45]: '煤煤亲了我'

# 关键字参数(知道name后就可以指定参数对应了)
In [46]: myfunc(o="我",vt="亲了",s="煤煤")
Out[46]: '我亲了煤煤'

位置参数必须在关键字参数之前

# 位置参数和关键字参数反了就会报错
In [47]: myfunc(o="我","摸了摸","煤煤")
  Input In [47]
    myfunc(o="我","摸了摸","煤煤")
                           ^
SyntaxError: positional argument follows keyword argument

# 关于默认参数,这样写就不会报错,因为关键字参数在最后面
In [48]: def myfunc(s, vt, o="煤煤"):
    ...:     return "".join((o, vt, s))
    ...:

In [49]: myfunc("焦焦","摸了摸")
Out[49]: '煤煤摸了摸焦焦'

In [50]: myfunc("焦焦","摸了摸","流浪猫")
Out[50]: '流浪猫摸了摸焦焦'

# 默认参数要放在最后面,不然就会报错
In [51]: def myfunc(s="焦焦", vt, o="煤煤"):
    ...:     return "".join((o, vt, s))
  Input In [51]
    def myfunc(s="焦焦", vt, o="煤煤"):
                       ^
SyntaxError: non-default argument follows default argument


In [52]: def myfunc(vt="", s="焦焦", o="煤煤"):
    ...:     return "".join((o, vt, s))
    ...:

In [53]: myfunc("摸了摸")
Out[53]: '煤煤摸了摸焦焦'

冷知识:斜杠左面不能使用关键字参数,只能使用位置参数

# 例如:abs和sum这两个函数都有一个斜杠
In [54]: help(abs)
Help on built-in function abs in module builtins:

abs(x, /)
    Return the absolute value of the argument.


In [55]: help(sum)
Help on built-in function sum in module builtins:

sum(iterable, /, start=0)
    Return the sum of a 'start' value (default: 0) plus an iterable of numbers

    When the iterable is empty, return the start value.
    This function is intended specifically for use with numeric values and may
    reject non-numeric types.

# 例如abs ,关键字参数在前就会报错
In [56]: abs(-1.5)
Out[56]: 1.5

In [57]: abs(x = -1.5)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Input In [57], in <cell line: 1>()
----> 1 abs(x = -1.5)

TypeError: abs() takes no keyword arguments


# 自己定义的函数也可以这样用斜杠定义参数
In [60]: def abc(a , / , b , c):
    ...:     print(a, b, c)
    ...:

In [61]: abc(1,2,3)
1 2 3

In [62]: abc(a=1,2,3)
  Input In [62]
    abc(a=1,2,3)
               ^
SyntaxError: positional argument follows keyword argument


In [63]: abc(3,b=2,c=1)
3 2 1
posted @ 2024-03-29 23:46  2ich4n  阅读(36)  评论(0)    收藏  举报