范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Python函数的参数类型

  Python函数的参数类型主要包括必选参数、可选参数、可变参数、位置参数和关键字参数,本文介绍一下他们的定义以及可变数据类型参数传递需要注意的地方。 必选参数
  必选参数(Required arguments)是必须输入的参数,比如下面的代码,必须输入2个参数,否则就会报错: def test_pide(num1, num2):   return num1/num2  print(test_pide(1,2))
  其实上面例子中的参数 num1和num2也属于关键字参数,比如可以通过如下方式调用: print(test_pide(num1=1,num2=2)) print(test_pide(num2=2,num1=1))
  执行结果: 0.5 0.5 可选参数
  可选参数(Optional arguments)可以不用传入函数,有一个默认值,如果没有传入会使用默认值,不会报错。 def test_add(num=1):   return num + 1 位置参数
  位置参数(positional arguments)根据其在函数定义中的位置调用,下面是pow()函数的帮助信息: >>> help(pow) Help on built-in function pow in module builtins:  pow(x, y, z=None, /)     Equivalent to x**y (with two arguments) or x**y % z (with three arguments)      Some types, such as ints, are able to use a more efficient algorithm when     invoked using the three argument form.
  x,y,z三个参数的的顺序是固定的,并且不能使用关键字: print(pow(2,5)) print(pow(5,2)) print(pow(x=5,2))
  输出: 32 25 SyntaxError: positional argument follows keyword argument
  在上面的pow()函数帮助信息中可以看到位置参数后面加了一个反斜杠 /  ,这是python内置函数的语法定义,Python开发人员不能在python3.8版本之前的代码中使用此语法。但python3.0到3.7版本可以使用如下方式定义位置参数:def myfunc(positional_or_keyword_parameters, *, keyword_only_parameters): 	pass
  星号前面的参数为位置参数或者关键字参数,星号后面是强制关键字参数,具体介绍见强制关键字参数。
  python3.8版本引入了强制位置参数(Positional-Only Parameters),也就是我们可以使用反斜杠 /  语法来定义位置参数了,可以写成如下形式:def myfunc(positional_only_parameters, /, positional_or_keyword_parameters, *, keyword_only_parameters):
  来看下面的例子: def test_pide(num1, num2, /):   return num1/num2  print(test_pide(1,2)) print(test_pide(num1=1,num2=2))
  python3.8运行: 0.5 TypeError: test_pide() got some positional-only arguments passed as keyword arguments: "num1, num2"
  不能使用关键字参数形式赋值了。 可变参数
  可变参数 (varargs argument) 就是传入的参数个数是可变的,可以是0-n个,使用星号( *  )将输入参数自动组装为一个元组(tuple):def test_sum(*numbers):     print(numbers)     print(type(numbers))     sum = 0     for num in numbers:         sum = sum + num     return sum  print(test_sum(1,2,3,4))
  执行结果: (1, 2, 3, 4)  10 关键字参数
  关键字参数(keyword argument)允许将任意个含参数名的参数导入到python函数中,使用双星号( **  ),在函数内部自动组装为一个字典。def person(**message):     print(message)     print(type(message))     if "name" in message:         print(f"my name is {message["name"]}")  person(name="zhangsan", age=18)
  执行结果: {"name": "zhangsan", "age": 18}  my name is zhangsan
  上面介绍的参数可以混合使用: def person(name,age=20,*hobby, **message):         print(f"my name is {name}, age {age}, hobbies {hobby}, others {message}")       person("zhangsan", 18, "running","swimming", height=175, weight=60)
  结果:  my name is zhangsan, age 18, hobbies ("running", "swimming"), others {"height": 175, "weight": 60}
  注意:由于传入的参数个数不定,所以当与普通参数一同使用时,必须把带星号的参数放在最后。 强制关键字参数
  强制关键字参数(Keyword-Only Arguments)是python3引入的特性,可参考:https://www.python.org/dev/peps/pep-3102/。 使用一个星号隔开: def person(name,age=20,*, height, weight):         print(f"my name is {name}, age {age}, height {height}, weight {weight}")      person("zhangsan", 18, height=175, weight=60)
  在位置参数一节介绍过星号前面的参数可以是位置参数和关键字参数。星号后面的参数都是强制关键字参数,必须以指定参数名的方式传参,如果强制关键字参数没有设置默认参数,调用函数时必须传参。 def person(name,age=20,*, height=175, weight):         print(f"my name is {name}, age {age}, height {height}, weight {weight}")      person("zhangsan", 18)
  执行结果: TypeError: person() missing 1 required keyword-only argument: "weight"
  也可以在可变参数后面命名关键字参数,这样就不需要星号分隔符了: def person(name,age=20,*hobby, height=175, weight):         print(f"my name is {name}, age {age}, hobbies {hobby}, height {height}, weight {weight}")      person("zhangsan", 18, "running","swimming", weight=60)
  执行结果: my name is zhangsan, age 18, hobbies ("running", "swimming"), height 175, weight 60 Python函数的参数传递
  在Python对象及内存管理机制中介绍了python中的参数传递属于对象的 引用传递 (pass by object reference),在编写函数的时候需要特别注意。
  先来看个例子: def test_func1(l):   l.append(4)  l1 = [1, 2, 3] l2 = l1 test_func1(l1) print(l1) print(l2)
  执行结果: [1, 2, 3, 4] [1, 2, 3, 4]
  l1 和 l2指向相同的地址,由于列表可变,l1改变时,l2也跟着变了。
  接着看下面的例子: def test_func2(l):   l = l + [4]  l1 = [1, 2, 3] test_func2(l1) print(l1)
  结果: [1, 2, 3]
  l1没有变化!为什么不是[1, 2, 3, 4]呢?
  l = l + [4]表示创建一个"末尾加入元素 4"的新列表,并让 l 指向这个新的对象,l1没有进行任何操作,因此 l1 的值不变。如果要改变l1的值,需要加一个返回值: def test_func3(l):   l = l + [4]   return l l1 = [1, 2, 3] l1 = test_func3(l1) print(l1)
  结果: [1, 2, 3, 4]
  下面的代码执行结果又是什么呢? def test_func4(l):   l.append(4)   return l  l1 = [1, 2, 3] l2 = l1 l1 = test_func4(l1) print(l1) print(l2) print(l1 is l2)
  执行结果: [1, 2, 3, 4] [1, 2, 3, 4] True
  和第一个例子一样,l1 和 l2指向相同的地址,所以会一起改变。这个问题怎么解决呢?
  可以使用下面的方式: def test_func5(l):   l = l + [4]   return l  l1 = [1, 2, 3] l2 = l1 l1 = test_func5(l1) print(l1) print(l2) print(l1 is l2)  # 执行结果 # [1, 2, 3, 4] # [1, 2, 3] # False
  也可以使用浅拷贝或者深度拷贝,具体使用方法可参考Python对象及内存管理机制。这个问题在Python编程时需要特别注意。 总结
  本文主要介绍了python函数的几种参数类型:必选参数、可选参数、可变参数、位置参数、强制位置参数、关键字参数、强制关键字参数,注意他们不是完全独立的,比如必选参数、可选参数也可以是关键字参数,位置参数可以是必选参数或者可选参数。
  另外,python中的参数传递属于对象的 引用传递 ,在对可变数据类型进行参数传递时需要特别注意,如有必要,使用python的拷贝方法。
  参考文档: Positional-Only Parameters:https://www.python.org/dev/peps/pep-0570/ Keyword-Only Arguments:https://www.python.org/dev/peps/pep-3102/
  --THE END--

金溢科技2022年第一季度亏损1638。67万同比亏损增加投资收益减少挖贝网5月4日,金溢科技(002869)发布2022年第一季度报告,报告期内公司实现营业收入83,566,344。93元,同比增长13。31归属于上市公司股东的净利润16,386,拼多多发布年报2021年净利润138亿元黄峥持股27。9品玩5月4日讯,拼多多(NasdaqPDD)提交给美国证券交易委员会(SEC)的FORM20F年报显示,公司2021年总营收为939亿元,不按美国通用会计准则,净利润为138亿元。五月千元以下手机选购指南为了避免不必要的争议,本文章所有推荐均来自该品牌官方售价。1000元以下,本价位买给父母或者囊中不充裕的伙伴较好价位。第一款Redmi9A。优点价格便宜最低配仅需599元就可入手,尽管全球智能手机销量下滑,苹果iPhone市场份额仍增长202022年第一季度,全球智能手机出货量同比下降11至3。14亿部,但苹果(纽约证券交易所代码AAPL)仍设法扩大其市场份额。目前,这家来自库比蒂诺的公司在市场份额上稳居第二,仅次于别再被坑了,一千多的手机和七八千的手机,到底怎么用最划算?都听说过一个手机用四五年的,但是你却很少见过有人一千多的手机用四五年。不许抬杠,我们村有个大爷,诺基亚都快用10年了,黑白屏的,就换过一次电池,半个月不充电啥事没有!其实不管多少钱智能手机自动清理灰尘我也是刚刚才知道智能手机上面有一个自动清理灰尘的功能,注意是清理灰尘,不是清理垃圾文件。所谓的清理灰尘呢就是我们手机的耳机孔充电孔音箱孔等等,里面有一些灰尘。手机本身呢它就有这个功比亚迪利润竟与特斯拉相差25倍,它真能超越特斯拉吗?随着近几年的新能源汽车的发展,国内外汽车厂商都开始研发自己的新能源汽车,尤其是中国的新能源汽车竞争尤为强烈。新能源2021年,全球的新能源汽车销量约为650万辆,其中中国新能源汽车冯建峰科研是第一快乐的事来源人民日报冯建峰在科研讨论班讲课。资料照片冯建峰(中)在参与实验数据分析。资料照片人物名片冯建峰1964年生,长江学者特聘教授,现任上海数学中心首席教授复旦大学类脑智能科学与技术今日资讯鸿海将组装苹果汽车Facebook将关闭其播客平台一公司为微信公众号提供刷量服务被判赔腾讯100万北京市东城区人民法院审理了一起不正当竞争案,法院认为,被告某科技公司通过技术手段实现关注阅读等的批量化操作服务,使部分微信公众号平台activiti7。1。0。M6(七)获取流程审批图片,高亮显示根据流程实例Id,获取实时流程图片paramprocessInstanceIdparamparamuseCustomColortrue用自定义的颜色(完成节点绿色,当前节点红色),Aryaka与卡内基梅隆大学的CyLab将合作研究新的网络威胁缓解技术据ZDnet网5月4日报道,Aryaka宣布已与卡内基梅隆大学(CMU)安全与隐私研究所CyLab建立战略合作伙伴关系,合作研究新的网络威胁缓解技术,并为企业网络和安全提供创新的解
他被15个女友包养,每月只上8天班月入百万,活成日本男人的梦想坊间曾流传过这样的人生成功学赚美国的工资,住英国的房子,吃中国的料理,娶日本的老婆。日本女人素有贤惠温柔的风评。试想哪个男人不想在自己疲累一天踏入家门之时,有人柔柔嗲嗲地问上一声您比和老公吵架更可怕的事,是和婆婆闹僵最近很多小伙伴说看不到薇安说的推文薇安姐设计了一个好玩的游戏把你置顶星标薇安说的截图发到后台每周抽取第8285888100名小伙伴你将获得66元的红包幸运奖哦如果不知道如何置顶星标美版马自达MX30喜提最差续航里程和最便宜租赁车型?定位于紧凑型跨界SUV的马自达MX30纯电版车型,在美国是以租赁方式销售。据统计,马自达MX30是美国当前所销售的电动车型中续航里程是最差的,充满一次电仅能行驶160公里左右,这超东京情报大学(TUIS)选用DaVinciResolve从事线上后期制作课程BlackmagicDesign今日发布消息东京情报大学(TUIS)使用DaVinciResolve作为其学生所有在线后期制作课程的软件。该大学具有DaVinciResolve认证新法打破GooglePlay垄断谷歌允许在韩国使用第三方支付据MobileWorldLive报道,根据今年早些时候通过的一项法律,谷歌改变了其在韩国的应用内支付政策,允许开发者在该国境内提供第三方选项。在一份声明中,谷歌公共政策高级总监威尔请不起孩子吃68块钱的牛排,人生是不是很失败?豆瓣上看到个帖子,发帖的是一个中年男人老婆带着孩子去饭店吃饭,孩子想吃个68块的牛排,但妈妈没有舍得,两人最终还是点了其他便宜的食物。他说,自己是一个底层公务员,妻子月入才三千。以没广告的电视盒子小火6K电视盒子早先买的智能电视越来越卡,但是你要说因为系统卡了我就要换电视,那有点太奢侈了。实际上买电视就是买屏,屏不用总更新,但是系统内存都带不动了咋办?那就只能换个电视盒子了,结果你换了电视雅阁凯美瑞该有压力了,大众全新B级纯电轿车曝光?续航700km如果想买一辆合资品牌的B级车,大众家的迈腾或帕萨特应该是绕不过的选择,它也曾在国内市场创下不错的销售纪录。随着电动化的到来,各大车企都在争先发布新能源车型。近日,有海外媒体网站曝光做你美味人生的加分项华帝嵌入式智能蒸烤箱i23011人们生活水平不断提高,对美食的要求也在逐渐提高,我们对食物的口感,卖相不断有着更高的要求但是手残星人怎么办?我也想吃高级美食,但是我只会做方便面怎么办?难道厨艺小白就得放弃美食梦想TikTok居然有五种广告类型?你都了解吗?自2019年初,TikTok发布了广告投放平台,很多大公司像SheinNikeAppleOPPO等都开始在TikTok上做广告推广,以新颖独特有创造力的方式推广他们的品牌。与传统的TikTok广告细说之版位选择MediaReaction2021报告指出,TikTok在台湾市场的广告资产总和排名第一。在全球22个抽测市场中,TikTok在全球数字平台中的排名有所上升,排名第一或第二。Tik