首页 文章 精选 留言 我的

精选列表

搜索[AI生态友好],共10004篇文章
优秀的个人博客,低调大师

Python初学者友好丨详解参数传递类型

摘要:本文清晰地解释了Python中的不同参数传递类型,并提供了示例代码来说明每种类型的用法。对于初学者或不清楚Python传参的读者们来说是非常有益的,文中提供了足够的信息来理解和使用Python中的函数参数传递。 本文分享自华为云社区《提升Python函数调用灵活性:参数传递类型详解》,作者:frica01 。 前言 在Python编程中,函数参数起着非常重要的作用。函数参数允许我们向函数传递数据,并在函数内部使用这些值。Python提供了多种参数传递类型,包括位置参数、关键字参数、默认参数、可变数量的位置参数、可变数量的关键字参数。这些不同的参数传递方式使得函数调用更加灵活和可扩展。本文就来具体聊聊它们。 什么是Python传参 在 Python 中,传参是指在函数调用过程中将数据传递给函数的过程。传参允许我们向函数传递数据,以便在函数内部使用这些数据进行操作和处理。 在 Python 中,函数定义时使用的参数称为形式参数,也称为形参。形参是在函数定义过程中用来接收传递给函数的值的占位符。形参在函数体内被当作变量来使用,可以在函数体中进行操作和处理。 实际参数,也称为实参,是在函数调用时传递给函数的值或变量。实参是实际传递给函数的具体数值或对象。当我们调用一个函数时,需要为函数的形参提供相应的实参,这样函数才能执行相应的操作。 下面是一个简单的示例: def demo(name): print("Hello, " + name + "!") demo("Frica") 在上面的例子中,name 是函数 demo 的形参。 在函数调用时,传递了实参 Frica 给函数 demo,它被赋值给形参 name,然后函数体内部使用这个值进行打印操作。 总结起来,形参是函数定义中用于接收传递给函数的值的占位符,而实参是在函数调用时实际传递给函数的具体数值或对象。形参和实参的对应关系使得函数能够处理和操作具体的数据。 五种传参类型 传参类型可以单独使用,也可以组合使用。根据需要在函数定义中灵活地选择使用这些传参类型。 以下是Python中常见的几种传参类型: 位置参数:位置参数是最常见的参数类型,通过按照参数定义的顺序提供参数值; 关键字参数:关键字参数允许使用参数的名称来指定值,而不必按照顺序提供参数; 默认参数:默认参数允许为函数的一个或多个参数提供默认值。如果在函数调用时没有提供参数值,函数将使用默认值; 可变数量的位置参数:可变数量的位置参数允许接受任意数量的位置参数。在函数定义中,使用星号(*)来指定一个可变数量的位置参数,如果没有提供额外的位置参数,args将是一个空元组(()); 可变数量的关键字参数:可变数量的关键字参数允许接受任意数量的关键字参数。在函数定义中,使用双星号(**)来指定一个可变数量的关键字参数,如果没有提供额外的关键字参数,kwargs将是一个空字典({})。 位置传参 位置参数:位置参数是最常见的参数类型。当定义一个函数时,可以指定一个或多个位置参数。在调用函数时,需要按照参数的顺序提供对应的值。例如: def demo(name, age): print("Hello", name, "!") print("You are", age, "years old.") demo("Frica", 25) 在上面的例子中,name 和 age 是位置参数,按照顺序分别提供 “Frica” 和 25 作为参数值。 关键字传参 关键字参数:关键字参数允许你使用参数的名称来指定值,而不必按照顺序提供参数。使用关键字参数可以使代码更加清晰和易读。例如: def demo(name, age): print("Hello", name, "!") print("You are", age, "years old.") demo(age=25, name="Frica") 在上面的例子中,通过使用 age=25 和 name="Frica" 来指定参数的值,而不必考虑它们的顺序。 默认传参 默认参数:默认参数允许为函数的一个或多个参数提供默认值。 如果在函数调用时没有提供参数值,函数将使用默认值。默认参数通常在函数定义中指定,并且必须要位于位置参数之后(否则会有SyntaxError异常)。例如: def demo(name, age=18): print("Hello", name, "!") print("You are", age, "years old.") demo("Frica") # 使用默认值18 demo("Frica01", 25) # 覆盖默认值 在上面的例子中,age 参数有一个默认值 18。如果没有为 age 提供参数值,函数将使用默认值。 可变数量的位置传参 一般我们会使用 *args,当然,使用其它的变量也可以(这里的关键是 *,而不是args。 可变数量的位置传参:可变数量的位置参数允许接受任意数量的位置参数。在可能不确定函数会接受多少个参数的情况下,可以使用可变数量的参数。在函数定义中,可以使用星号(*)来指定一个可变数量的位置参数。例如: def print_info(*args): print(type(args))# 输出: <class 'tuple'> total = sum(num for num in args) return total result = print_info(1, 2, 3, 4, 5) print(result) # 输出:15 在上面的例子中,print_info 函数接受任意数量的位置参数,并将它们相加。 可变数量的关键字传参 一般我们会使用 **kwargs,当然,使用其它的变量也可以(这里的关键是 **,而不是kwargs。 可变数量的关键字参数传递:可变数量的关键字参数允许接受任意数量的关键字参数。在函数定义中,可以使用双星号(**)来指定一个可变数量的关键字参数。例如: def print_info(**kwargs): print(type(kwargs)) # 输出: <class 'dict'> for key, value in kwargs.items(): print(key, ":", value) print_info(name="Frica", age=25, city="GuangZhou") 在上面的例子中,demo 函数接受任意数量的关键字参数,并将它们打印出来。 多种传参类型组合 def print_info(name, *args, age=18, **kwargs): print("Name:", name) print("Age:", age) print("Additional arguments:") for arg in args: print("-", arg) print("Keyword arguments:") for key, value in kwargs.items(): print("-", key, ":", value) print_info("Frica", "arg1", "arg2", age=25, city="GuangZhou", country="China") 在上面的例子中,函数print_info接受以下参数: name是一个位置参数,必须提供值。 *args是一个可变数量的位置参数,可以接受任意数量的额外参数。 age是一个具有默认值的关键字参数。 **kwargs是一个可变数量的关键字参数,可以接受任意数量的关键字参数。 通过调用print_info函数,并提供相应的参数,可以灵活地组合使用这些参数类型。在函数体内部,可以根据需要访问和处理这些参数。 当调用print_info函数时,输出如下: Name: Frica Age: 25 Additional arguments: - arg1 - arg2 Keyword arguments: - city : GuangZhou - country : China 这个例子展示了多种传参类型的组合,包括位置参数、可变数量的位置参数、具有默认值的关键字参数和可变数量的关键字参数。读者可以根据实际的开发需求,在函数中灵活使用这些参数类型。 函数参数类型注解 这里以位置参数为例, def demo(name: str, age: int) -> str: return "Hello, " + name + "! You are " + str(age) + " years old." print(demo("Frica", 25))# 输出: Hello, Frica! You are 25 years old. 在这个例子中,参数 name 的类型被注解为字符串类型 str,参数 age 的类型被注解为整数类型 int,返回值的类型被注解为字符串类型 str。参数类型注解可以提供类型提示,帮助开发者更好地理解函数的参数和返回值的预期类型。 当然,这里只相当于是注释,即使传入的是其它类型是数据,也不会报错!!! 总结 本文介绍了Python中函数参数的不同类型和传递方式。 位置参数是最常见的参数类型,按照参数定义的顺序提供参数值。 关键字参数允许使用参数名称来指定值,提高了代码的可读性。 默认参数为函数的一个或多个参数提供默认值,在函数调用时可以选择性地提供参数值。 可变数量的位置参数和可变数量的关键字参数允许接受任意数量的位置参数和关键字参数,提供了处理不确定数量参数的便利性。 在函数定义中,我们可以根据需要灵活地选择使用这些参数传递类型,以满足开发的需求。通过合理选择参数传递类型,可以使得函数调用更加方便、可读,并提高代码的可扩展性。 点击关注,第一时间了解华为云新鲜技术~

优秀的个人博客,低调大师

Spring Boot Admin 2.2.0 发布,更友好的中文展示

核心依赖升级 Spring Cloud Hoxton.RELEASE Spring Boot 2.2.1 多语言支持 支持中文、法文、韩文、日文、英文 5国语言 详情页面增强 增强线程详细信息 支持展示Spring Cloud Kubernetes 端口信息 个性化 LOGO 登录名称定制化 登录页面 提示信息个性化定制 登录功能支持记住我 支持实例过滤 可以通过添加元信息过滤,忽略想监控的实例 BUG修复

优秀的个人博客,低调大师

MySQL PK MongoDB:多文档事务支持,谁更友好?

作者介绍 贺春旸,凡普金科DBA团队负责人,《MySQL管理之道:性能调优、高可用与监控》第一、二版作者,曾任职于中国移动飞信、安卓机锋网。致力于MariaDB、MongoDB等开源技术的研究,主要负责数据库性能调优、监控和架构设计。 MongoDB 4.0已经发布GA版本,并且有许多新功能和改进。在本文中,我们将重点关注主要功能,毫无疑问,这是对多文档ACID事务的支持。我们将围绕隔离级别、可重复读、幻读、事务冲突检测等主要功能,通过实验与MySQL一一做对比。 首先会简述介绍下ACID事务隔离级别,然后再步入测试主题正文。 原子性(Atomicity):事务包含的所有操作要么全部成功,要么全部失败,不存在成功一半的概念。典型例子“西方二元对立思想——非此即彼”:在二元逻辑体系中只存在两种逻辑值,就是对和错,或正和负,不存在既对又错或非正非负的其他状态。 一致性(Consistency):一个事务执行之前和执行之后都必须处于一致性状态。典型例子:“金龙,你借我5000元,下个月开支给你。”不论金龙用什么方式给我转账,分几次转,借钱结束后我银行卡里的余额增加5000元,金龙卡里少了5000元,不能突然蹦出来1万来。 隔离性(Isolation):数据库采用锁机制来实现事务的隔离性,当多个事务同时更新数据库中相同的数据时,只允许持有锁的事务能更新该数据,其他事务必须等待,直到前一个事务释放了锁,其他事务才有机会更新该数据。典型例子:“你去医院看病,要先到护士那里分诊排号,如果多个患者加塞儿同时进来,大夫就发飙了,出去排队,只能一个一个看”。 持久性(Durability):事务成功提交后,它对数据库所做的修改就永久保存下来,即使数据库崩溃,数据还能恢复到事务成功提交后的状态。典型例子:“你去ATM机取钱,结果ATM机故障了,你取出来了钱,卡里的余额不能没减。” 一、局限性与限制条件 1、多文档事务仅适用于副本集。 注:如果是单机,需切到副本集模式。 2、仅适用于WiredTiger存储引擎。 3、如果你的架构是分片Sharding模式,事务是不支持的。分布式事务计划在4.2版本里支持。 4、事务只支持CRUD操作,DDL、DCL操作不支持。 注:CRUD就是MySQL的DML,意思一样叫法不同而已。 5、事务无法在config、admin和local系统数据库中读取或写入。6、事务无法在system.*(系统集合)里写入。 7、不能有大事务写入,写入集不能超过16MB(类似MariaDB Galera Cluster写入集wsrep_max_ws_size限制),否则客户端直接报错。 注:如果有大事务,应该考虑将这些大事务拆分成若干块较小的事务。例如将大于2018年的状态值更改为1,应考虑循环1万条一批量更新,这一点跟MySQL玩法一样。 二、我们第一个事务 在开始事务之前,必须创建会话。事务不能在会话外运行。 var session1 = db.getMongo().startSession() var session2 = db.getMongo().startSession() Mongo Shell里引入了三个用于创建,提交和终止事务的新命令: session.startTransaction() 在当前会话中启动事务 session.commitTransaction() 持久保存事务中的操作变更 session.abortTransaction() 终止事务操作所做的变更 1、在test库创建t1表,并且插入4条数据。演示一演示二空闲事务受transactionLifetimeLimitSeconds参数影响,默认60秒。 可通过以下命令查看: db.adminCommand( { getParameter: 1, transactionLifetimeLimitSeconds: 1 } ) 如果你想在线变更,可以通过下面的命令设置: db.adminCommand( { setParameter: 1, transactionLifetimeLimitSeconds: 30 } ) 也可以写死在/etc/mongod.cnf配置文件里永久生效,格式如下: setParameter = transactionLifetimeLimitSeconds=30 ![image](https://yqfile.alicdn.com/f0d24428db1507628899f141fd8fb551dfa41493.png) 三、事务隔离性演示 演示一:事务冲突检测 ![image](https://yqfile.alicdn.com/a778a995fc2e915ce0d279f2caa47d201b5ae01a.png) 注:空闲事务是指当一个事务长时间未提交,那么这个连接就不能关闭,内存就不释放,并发一大,导致DB连接数增多,就会对性能产生影响。默认是60秒,你可以根据自己的情况设定阈值。超过这个阈值,服务端自动杀死未提交的空闲事务。当两个(或多个)并发事务修改相同的文档时,会发生冲突。即使在尚未提交事务时,MongoDB也可以立即检测到冲突。 这里和MySQL有些区别,MySQL可以通过参数innodb_lock_wait_timeout设置检测到事务冲突后,自动终止回滚的时间,而MongoDB没有提供该参数。 当在执行创建索引时,未加{background:1})后台创建。 此时新事务将无法获取所需的锁,并且在等待参数maxTransactionLockRequestTimeoutMillis后事务终止回滚,默认值是5毫秒。如果你想在线调整事务等待获取锁的时间,可以通过下面的命令设置: db.adminCommand( { setParameter: 1, maxTransactionLockRequestTimeoutMillis: 15 } ) 也可以写死在/etc/mongod.cnf配置文件里永久生效,格式如下: setParameter = maxTransactionLockRequestTimeoutMillis=15 演示二:可重复读 Repeatable Read (可重复读)可避免脏读、不可重复读的发生。 不可重复读侧重点在于更新修改的数据,即在同一个事务里,两次查询的数据结果不一致。与脏读的区别是:脏读是一个事务读取了另一个事务未提交的脏数据。 演示三:幻读在MySQL默认隔离级Repeatable Read下,刚才的操作,在会话二未提交的事务里,会莫名其妙地看到第5条数据,这种现象称为幻读。 幻读和不可重复读很像,但幻读侧重点在于新增和删除,而不可重复读侧重点在于更改,共同之处都是一个事务中两次查询得到的数据结果不一致。 由此,从测试结果得出的结论是: MongoDB采用的默认隔离级别是Snapshot一致性快照(特别是设置了readConcern=majority情况下,要读某行数据的历史版本时,依赖该隔离级别。) Snapshot介于Repeatable Read与Serializable之间,既避免了脏读、不可重复读、幻读,又不会因Serializable串行化降低并发性能。原文发布时间为:2018-12-18本文作者:贺春旸本文来自云栖社区合作伙伴“ DBAplus社群 ”,了解相关信息可以关注“dbaplus”微信公众号

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册