理解函数参数中的*(星号)和**(双星号)

理解函数参数中的*(星号)和**(双星号)

*(星号)用于解包序列或可迭代对象,将其元素分配给函数的参数或在列表、元组等数据结构中进行拼接。
Python中的可迭代对象包括但不限于以下几种类型:
序列类型:如‌列表(List)、‌元组(Tuple)、‌字符串(String)等。这些对象内部包含了一系列按顺序排列的元素,可以通过索引访问其中的元素。
映射类型:如‌字典(Dictionary)。这些对象包含了一系列键值对,可以通过键来访问对应的值。
生成器类型:通过生成器函数或生成器表达式创建的对象,可以逐个生成值。
集合类型:如集合(Set)和‌冻结集合(Frozen Set)。对象包含了一组唯一的元素,但没有按照顺序排列。

(双星号)用于解包 ** 字典,将其键值对传递给函数的参数或在字典中进行拼接。

1. * 星号

示例:

# 定义求和函数
def sum_values(*args):
    total = 0
    for num in args:
        total += num
    return total

# 多个参数
result = sum_values(1, 2, 3, 4, 5)
print(result)  # 输出:15

# *号引用列表对象拼接
numbers = [1, 2, 3, 4, 5]
result = [*numbers, 6, 7, 8]
print(result)  # 输出:[1, 2, 3, 4, 5, 6, 7, 8]

# 用列表作为参数,参数数量可以灵活变化
get_sum = sum_values(*result)
print(get_sum)  # 输出:36

理解:

  • 函数参数解包:当你有一个包含多个元素的列表或元组时,可以使用*将其解包,并将每个元素作为单独的参数传递给函数,函数的参数数量不限。
  • 序列解包:使用*可以将一个序列解包,拼接到另一个序列中。

2. **双星号

(1)函数按位置调用

在函数调用的时候,如果给缺省参数传递实参值 。

def print_info1(name,age,city):
    print ("name :", name)
    print ("age :", age)
    print ("city :", city)
                                                                          
print_info1("Alice", 25, "New York")

结果:

name : Alice
age : 25
city : New York

按函数的关键字传参,打乱定义的参数顺序:

print_info1(age=25, name="Alice", city="New York")

执行结果同上。

(2)字典传参数

可变数量的关键字参数:在函数定义时,**kwargs可以接受可变数量的关键字参数,参数被封装为一个字典。

def print_info2(**kwargs):
    for key, value in kwargs.items():
        print (key," :", value)
                                                                          
print_info2(age=25, name="Alice", city="New York")

执行结果:

age  : 25
name  : Alice
city  : New York

可变参数示例,定义字典:

person_info ={'age':25, 'name':"Alice", 'city':"New York",'sex':'female','dept':'test dept'}
print_info2(**person_info)

执行结果:

age  : 25
name  : Alice
city  : New York
sex  : female
dept  : test dept

最常见的应用就是MySQL数据库连接:

import pymysql
global_config = {
    "host": '127.0.0.1',
    "user": "root",
    "password": "pwd_MySQL",
    "database": "mysqldb",
    "use_unicode": "True",
    "charset": "utf8"
}
# 数据库连接,根据需要修改配置信息
global_db_mysql = pymysql.connect(**global_config)

(3)拼接

两个字典的拼接:

defaults = {"font":"Arial","color": "red", "size": "medium"}
user_preferences = {"size": "large", "theme": "dark"}
result = {**defaults, **user_preferences}
print(result)

执行结果:

{'font': 'Arial', 'color': 'red', 'size': 'large', 'theme': 'dark'}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值