首页 > 编程语言 >python适应不同场景的函数 - *args, **kwargs

python适应不同场景的函数 - *args, **kwargs

时间:2024-05-09 11:47:01浏览次数:20  
标签:python args 参数 func kwargs print my

在Python中,*args和**kwargs是用来处理函数中不定数量的参数的特殊语法。

*args和**kwargs介绍

*args

*args用于传递不定数量的位置参数,它会将传递给函数的位置参数收集到一个元组中。例如:

def my_func(*args):
    for arg in args:
        print(arg)

my_func(1, 2, 3)

在这个例子中,my_func函数接受不定数量的位置参数,并将它们打印出来。

**kwargs

**kwargs用于传递不定数量的关键字参数,它会将传递给函数的关键字参数收集到一个字典中。例如:

def my_func(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

my_func(a=1, b=2, c=3)

在这个例子中,my_func函数接受不定数量的关键字参数,并将它们打印出来。

可以同时在函数定义中使用args和**kwargs,并且它们的顺序是固定的,即args必须在**kwargs之前。例如:

def my_func(*args, **kwargs):
    for arg in args:
        print(arg)
    for key, value in kwargs.items():
        print(f"{key}: {value}")

my_func(1, 2, 3, a=4, b=5)

在这个例子中,my_func函数接受不定数量的位置参数和关键字参数,并将它们打印出来。

应用

如果希望函数里参数有默认值

如果我希望my_func()函数里,a、b有默认值,比如a="AA", b=10

可以在函数定义中给**kwargs设置默认值,然后在函数内部检查是否传入了对应的关键字参数。如果没有传入,则使用默认值。例如:

def my_func(*args, **kwargs):
    a = kwargs.get('a', 'AA')
    b = kwargs.get('b', 10)

    for arg in args:
        print(arg)
    
    print(f"a: {a}")
    print(f"b: {b}")

my_func(1, 2, 3, b=20)

在这个例子中,如果没有传入a和b的值,a会使用默认值'AA',b会使用默认值10。你可以调用my_func函数并传入其他位置参数和关键字参数,如果没有传入a和b,则会使用默认值。

实际应用

当使用args和**kwargs时,可以处理不定数量的参数,这在实际应用中非常有用。以下是一些使用args和**kwargs的实际应用示例:

日志记录器函数

可以编写一个通用的日志记录器函数,接受不定数量的参数,并将它们记录到日志文件中。

def log_message(*args, **kwargs):
    level = kwargs.get('level', 'INFO')
    message = ' '.join(args)
    print(f"[{level}] {message}")

log_message("User logged in", level='DEBUG')
log_message("Error occurred", level='ERROR')

配置文件解析器

可以编写一个函数,接受不定数量的键值对作为参数,然后将这些参数解析为配置字典。

def parse_config(**kwargs):
    config = {}
    for key, value in kwargs.items():
        config[key] = value
    return config

config = parse_config(username='admin', password='123456', host='localhost')
print(config)

HTML标签生成器

可以编写一个函数,接受标签名和不定数量的属性作为参数,然后生成相应的HTML标签。

def create_html_tag(tag_name, **kwargs):
    attributes = ' '.join([f'{key}="{value}"' for key, value in kwargs.items()])
    return f'<{tag_name} {attributes}></{tag_name}>'

input_tag = create_html_tag('input', type='text', name='username', placeholder='Enter your username')
print(input_tag)

这些示例展示了如何使用args和**kwargs处理不定数量的参数,使函数更加灵活和通用。您可以根据具体的需求和场景,灵活运用args和**kwargs来简化代码并提高可复用性。

操作mysql的类

当编写一个链接MySQL数据库的类时,你可以使用*args和**kwargs来处理不定数量的连接参数。以下是一个示例代码,展示了如何编写一个简单的MySQL连接类:

import mysql.connector

class MySQLConnection:
    def __init__(self, **kwargs):
        self.connection = mysql.connector.connect(**kwargs)
        self.cursor = self.connection.cursor()

    def execute_query(self, query):
        self.cursor.execute(query)
        result = self.cursor.fetchall()
        return result

    def close_connection(self):
        self.cursor.close()
        self.connection.close()

# 使用示例
connection_params = {
    'host': 'localhost',
    'user': 'root',
    'password': 'password',
    'database': 'my_database'
}

mysql_conn = MySQLConnection(**connection_params)
result = mysql_conn.execute_query("SELECT * FROM my_table")
print(result)

mysql_conn.close_connection()

在这个示例中,MySQLConnection类接受不定数量的连接参数作为**kwargs,然后使用这些参数来建立MySQL数据库连接。你可以调用execute_query方法来执行查询,并调用close_connection方法来关闭连接。

这个示例展示了如何结合*args和**kwargs来编写一个灵活的MySQL连接类,以处理不定数量的连接参数。你可以根据实际的需求进一步扩展和定制这个类。

标签:python,args,参数,func,kwargs,print,my
From: https://www.cnblogs.com/zibinchen/p/18181766

相关文章

  • python读写json文件
    1.新建json文件打开记事本,重命名为.json后缀使用的样例如下,注意看json文件格式:{"server":{"host":"example.com","port":443,"protocol":"https"},"authentication":{......
  • 解决 node-gyp 错误问题|node与python版本不匹配报错|node-gyp|vue
    项目要用到node-gyp(给爷爬)mac上没问题windows有问题看上面的日志,提到了python2.7看来这个模块用的上古时代的python2.7的技术windows的同学可以先安装python2这里下载:https://www.python.org/ftp/python/2.7/python-2.7.amd64.msi不要修改路径!!不要修改路径!!等......
  • python-利用ffmpeg快速提取视频的音频文件
    """利用ffmpeg快速提取视频的音频文件"""#参考"https://www.cnblogs.com/CodeAndMoe/p/13360011.htmlwindow安装ffmpeg并且设置环境变量https://zhuanlan.zhihu.com/p/118362010"importosdefmain(v_path):#v_path表示视频所在路径生成后的MP3音频文件会在该视频文件目录中......
  • Python字符串方法:字符串查找、替换、分割
    字符串查找Python提供了内置的字符串查找方法find(),利用该方法可以在一个较长的字符串中查找子字符串。如果该字符串中,有一个或者多个子字符串,则该方法返回第一个子串所在位置的最左端索引,若没有找到符合条件的子串,则返回-1。find()方法的基本使用语法如下:source_string.find(s......
  • python+opencv读取/保存图片
    读取图片导入opencv的包通过imread函数读取图片namedWindow创建一个窗口用于显示imshow将图片显示出来importcv2ascvsrc=cv.imread("D:\\myCode\\picture\\003.jpg")#参数为图片的路径#第一个参数会设置为窗口的标题同时他也会作为和下面imshow进行匹配,以确定将显......
  • [读书]-像计算机一样 思考python
    目录前述第二章:变量、表达式、和语句第三章:函数第五章:条件和递归第六章:有返回数值的函数第七章:迭代第八章:字符串第十章:列表第十一章:词典第十二章:tuple第十四章:文件14.2读和写14.3格式化字符串,两种方式14.4os模块14.5读写异常14.7pickle14.9模块相关14.10其他前述编程语......
  • 异常检测(Anomaly Detection)方法与Python实现
    异常检测(Anomalydetection)是机器学习中一种常见应用,其目标是识别数据集中的异常或不寻常模式。尽管通常被归类为非监督学习问题,异常检测却具有与监督学习相似的特征。在异常检测中,我们通常处理的是未标记的数据,即没有明确的标签指示哪些样本是异常的。相反,算法需要根据数据本身......
  • python在Scikit-learn中用决策树和随机森林预测NBA获胜者
    原文链接:http://tecdat.cn/?p=5222原文出处:拓端数据部落公众号 在本文中,我们将以Scikit-learn的决策树和随机森林预测NBA获胜者。美国国家篮球协会(NBA)是北美主要的男子职业篮球联赛,被广泛认为是首屈一指的男子职业篮球联赛在世界上。它有30个队(美国29个,加拿大1个)。在常规赛......
  • 流畅的python学习笔记
    示例1-1一摞有序的纸牌知识点:collections.namedtuple构建了一个简单的类,表示单张纸牌。fromcollectionsimportnamedtupleCard=namedtuple('Card',['rank','suit'])classFrenchDeck:ranks=[str(n)forninrange(2,11)]+list('JQKA')......
  • python 构建jenkins job
    学习文档:https://www.cnblogs.com/hujinzhong/p/14593293.htmlhttps://blog.csdn.net/qq_45939519/article/details/121052408官方文档:API参考—PythonJenkins1.8.0文档(python-jenkins.readthedocs.io) 使用Python-Jenkins—PythonJenkins1.8.0文档 impor......