1.3 python基本语法-变量与函数

变量

python变量不需要类型和声明,直接用 = 赋值。

a = 1
b = "hello world"
c = ["test"]

多个变量赋值

a, b = 1, "hello"
x = y = 1

函数

函数定义

以 def 关键字定义函数名

函数名可以包含数字、字母、下划线

函数名后需要指定函数参数,括号“()”括起来,传参可以为空

参数列表后,以冒号开始函数体

函数体需要缩进

def func(name, age=1, *arg, **kwargs):
    print(f"{name}: {age}")
    return 0

函数参数 

默认值参数

即为函数的参数指定默认值,当调用函数时此参数缺省,则赋值为默认值。这里需要特别注意,当传参是列表、字典等不可变对象时,会影响作用域外的值

例如



def func(value, array=[]):
    array.append(value)
    return array


if __name__ == '__main__':
    array = []
    print(func(1, array))
    print(func(2, array))
    print(func(3, array))

[1]
[1, 2]
[1, 2, 3]

关键字参数

函数调用时,可以通过指定关键字传递,而不需要关心顺序



def func(name, age):
    print(f"name {name} age {age}")


if __name__ == '__main__':
    func(name="小明", age=10)
    func(age=20, name="大明")

name 小明 age 10
name 大明 age 20

函数调用时,关键字参数必须跟在位置参数后面。所有传递的关键字参数都必须匹配一个函数接受的参数。

最后一个形参为 **name 形式时,接收一个字典,该字典包含与函数中已定义形参对应之外的所有关键字参数。


def func(name="", **kwargs):
    description = f"name {name}"
    if "age" in kwargs:
        description = f"{description} age {kwargs.get('age')}"
    print(description)


if __name__ == '__main__':
    func("小明", age=10)
    func("小明", city="深圳")

name 小明 age 10
name 小明

特殊参数

def f(pos1, pos2, /, pos_or_kwd, *, kwd1, kwd2):
      -----------    ----------     ----------
        |             |                  |
        |        Positional or keyword   |
        |                                - Keyword only
         -- Positional only
 仅位置参数

特定形参可以标记为 仅限位置仅限位置 时,形参的顺序很重要,且这些形参不能用关键字传递。仅限位置形参应放在 / (正斜杠)前。/ 用于在逻辑上分割仅限位置形参与其它形参。如果函数定义中没有 /,则表示没有仅限位置形参。

位置或关键字参数

函数定义中未使用 / 和 * 时,参数可以按位置或关键字传递给函数

仅限关键字参数

把形参标记为 仅限关键字,表明必须以关键字参数形式传递该形参,应在参数列表中第一个 仅限关键字 形参前添加 *



def func(name, age, /, city, zone, *, street, number):
    print(f"name {name} age {age} city {city} zone {zone}, street {street} number {number}")


if __name__ == '__main__':
    func("小明", 10, "北京", zone="朝阳区", street="人民路", number=1)
    func("小李", 10, "北京", zone="海淀区", number=2, street="解放路")

name 小明 age 10 city 北京 zone 朝阳区, street 人民路 number 1
name 小李 age 10 city 北京 zone 海淀区, street 解放路 number 2

任意实参列表

也有场景会在调用函数时,使用任意数量的实参。例如用*或**定义的函数参数



def print_args(name, *args):
    arg_list = []
    for arg in args:
        arg_list.append(arg)
    print(arg_list)


if __name__ == '__main__':
    print_args("numbers", 1, 2, 3)

[1, 2, 3]

variadic 参数用于采集传递给函数的所有剩余参数,因此,它们通常在形参列表的末尾。*args 形参后的任何形式参数只能是仅限关键字参数,即只能用作关键字参数,不能用作位置参数。



def print_args(name, *args, description=""):
    arg_list = []
    for arg in args:
        arg_list.append(arg)
    print(arg_list)
    print(name, description)


if __name__ == '__main__':
    print_args("numbers", 1, 2, 3, description="描述")

[1, 2, 3]
numbers 描述

解包实惨列表

函数调用要求独立的位置参数,但实参在列表或元组里时,要执行相反的操作

换句话说,就是把需要传递的参数,用*操作符把实参从列表或元组解包出来,或是用**操作符把实参从字典里解出来


def print_person(name, age):
    print(f"name {name} age {age}")


def print_range(start, stop):
    print(f"start {start} stop {stop}")


if __name__ == '__main__':
    array = [1, 10]
    print_range(*array)
    people = {
        "name": "小明", "age": 10
    }
    print_person(**people)

start 1 stop 10
name 小明 age 10

参考

4. 更多控制流工具 — Python 3.12.1 文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值