017、函数
本文最后更新于 67 天前,其中的信息可能已经过时,如有错误请发送邮件到wuxianglongblog@163.com

函数

定义函数

函数,通常接受输入参数,并有返回值。它负责完成某项特定任务,而且相较于其他代码,具备相对的独立性。

def add(x, y):
    """Add two numbers"""
    a = x + y
    return a

函数通常有一下几个特征:

  • 使用 def 关键词来定义一个函数。
  • def 后面是函数的名称,括号中是函数的参数,不同的参数用 , 隔开, def foo(): 的形式是必须要有的,参数可以为空;
  • 使用缩进来划分函数的内容;
  • docstring 用 """ 包含的字符串,用来解释函数的用途,可省略;
  • return 返回特定的值,如果省略,返回 None

使用函数

使用函数时,只需要将参数换成特定的值传给函数。

Python并没有限定参数的类型,因此可以使用不同的参数类型:

add(2, 3)
5
add('foo', 'bar')
'foobar'

传入的两个参数不可以相加,Python会将报错:

add(2, "foo")
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

Input In [4], in ()
----> 1 add(2, "foo")

Input In [1], in add(x, y)
      1 def add(x, y):
      2     """Add two numbers"""
----> 3     a = x + y
      4     return a

TypeError: unsupported operand type(s) for +: 'int' and 'str'

传入的参数数目与实际不符合,也会报错:

add(1, 2, 3)
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

Input In [5], in ()
----> 1 add(1, 2, 3)

TypeError: add() takes 2 positional arguments but 3 were given
add(1)
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

Input In [6], in ()
----> 1 add(1)

TypeError: add() missing 1 required positional argument: 'y'

传入参数时,Python提供了两种选项,第一种是上面使用的按照位置传入参数,另一种则是使用关键词模式,显式地指定参数的值:

add(x=2, y=3)
5
add(y="foo", x="bar")
'barfoo'

可以混合这两种模式:

add(2, y=3)
5

设定参数默认值

可以在函数定义的时候给参数设定默认值,例如:

def quad(x, a=1, b=0, c=0):
    return a*x**2 + b*x + c
quad(2.0)
4.0

可以修改参数的默认值:

quad(2.0, b=3)
10.0
quad(2.0, 2, c=4)
12.0

这里混合了位置和指定两种参数传入方式,第二个2是传给 a 的。

注意,在使用混合语法时,要注意不能给同一个值赋值多次,否则会报错,例如:

quad(2.0, 2, a=2)
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

Input In [14], in ()
----> 1 quad(2.0, 2, a=2)

TypeError: quad() got multiple values for argument 'a'

接收不定参数

使用如下方法,可以使函数接受不定数目的参数:

def add(x, *args):
    total = x
    for arg in args:
        total += arg
    return total

*args 表示参数数目不定,可以看成一个元组,把第一个参数后面的参数当作元组中的元素:

add(1, 2, 3, 4)
10
add(1, 2)
3

这样定义的函数不能使用关键词传入参数,要使用关键词,可以这样:

def add(x, **kwargs):
    total = x
    for arg, value in kwargs.items():
        print("adding ", arg)
        total += value
    return total

**kwargs 表示参数数目不定,相当于一个字典,关键词和值对应于键值对:

add(10, y=11, z=12, w=13)
adding  y
adding  z
adding  w

46

可以接收任意数目的位置参数和键值对参数的函数:

def foo(*args, **kwargs):
    print(f'{args=}, {kwargs=}')
foo(2, 3, x='bar', z=10)
args=(2, 3), kwargs={'x': 'bar', 'z': 10}

返回多个值

函数可以返回多个值:

from math import atan2

def to_polar(x, y):
    r = (x**2 + y**2) ** 0.5
    theta = atan2(y, x)
    return r, theta

r, theta = to_polar(3, 4)
r, theta
(5.0, 0.9272952180016122)

Python将返回的两个值变成了元组:

to_polar(3, 4)
(5.0, 0.9272952180016122)

函数类型注释

Python 3支持对函数的类型进行注释,但是不会真正检验对象的类型:

def add(a : int, b : int) -> int: 
    return a + b
add(1, 2)
3

类型不是int也不会报错:

add("a", "b")
'ab'
谨此笔记,记录过往。凭君阅览,如能收益,莫大奢望。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇