首页 > 编程语言 >python函数传参

python函数传参

时间:2024-02-19 10:22:15浏览次数:20  
标签:传参 city 函数 python age num 参数 print name

python函数传参

参考:python函数参数传递(params, *params, **params

位置参数

常见的函数参数:

def add_both(x, y):
    return x+y

默认参数

def enroll(name, gender, age=6, city='Beijing'):
    print('name:', name)
    print('gender:', gender)
    print('age:', age)
    print('city:', city)
enroll('tom','man',12,'shanghai')
# 输出
name: tom
gender: man
age: 12
city: shanghai

如果不按顺序时,需要把参数名加上:

def enroll(name, gender, age=6, city='Beijing'):
    print('name:', name)
    print('gender:', gender)
    print('age:', age)
    print('city:', city)
enroll(gender='woman',name='Pam',age=22,city='changsha')
# 输出
name: Pam
gender: woman
age: 22
city: changsha

使用默认参数的特点:

  1. 能降低调用函数的难度
  2. 必选参数在前,默认参数在后,否则会报错
  3. 当有多个参数时,把变化大的参数放前面,变化小的参数放后面,可以作为默认参数。

默认参数必须指向不变对象:

def add_end(L=[]):
    L.append('END')
    return L
add_end()
add_end()
# 输出
['END', 'END']
  • 问题:连续调用函数,默认参数是[],但函数似乎每次都记住了上次添加了‘end’后的list

  • 原因:默认参数L是一个变量,指向对象[],每次调用函数,如果改变了L的内容,则下次调用时,默认参数的内容改变了,不再是函数定义的[]

  • 解决办法:默认参数都是None

def add_end(L=None):
    if L is None:
        L = []
    L.append('END')
    return L
add_end()
add_end()
# 输出
['END']
  • 将参数设置为不变对象,对象内部的数据就不能修改。

可变参数

可变参数就是传入的参数个数是可变的,可以是任意的。

传统方式,可以传入list、tuple。

def cal_num(nums):
    for i in nums:
        print(i)
cal_num([1,2])
cal_num(('aaa','sss'))
cal_num('ssss')
# 输出
1
2
aaa
sss
s
s
s
s

可定义可变参数,是在参数前加一个*号,将其接收到参数值自动组装为一个tuple:

def cal_num(*nums):
    for i in nums:
        print(i)
cal_num(1,2)
cal_num([1,2])
cal_num(('aaa','sss'))
cal_num('ssss')
# 输出
1
2
[1, 2]
('aaa', 'sss')
ssss

如果有一个list或tuple,想要将其元素逐个传入函数中:

def cal_num(*nums):
    for i in nums:
        print(i)
nums = [1, 2]
cal_num(nums)
cal_num(*nums)
# 输出
[1, 2]
1
2

关键字参数

可定义关键词参数,是在参数前加一个**号,将传入的任意个参数值自动组装为一个dict,即类似于“键值对”:

def person(name, age, **kw):
    print('name:', name, 'age:', age, 'other:', kw)
person('Michael', 30)
person('Bob', 35, city='Beijing')
person('Adam', 45, gender='M', job='Engineer')
# 输出
name: Michael age: 30 other: {}
name: Bob age: 35 other: {'city': 'Beijing'}
name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}

命名关键字参数

命名关键字参数是限制关键字参数的名字,与关键字参数定义不同,只需要一个特殊分隔符*,后面的参数作为命名关键字参数。

def person(name, age, *, city, job):
    print(name, age, city, job)
person('Michael', 30)
person('Bob', 35, city='Beijing')
person('Adam', 45, city='shanghai', job='Engineer')
# 输出
报错
报错
Adam 45 shanghai Engineer
  • 命名关键字参数,不能是0参数,必须传入指定参数名的参数

如果函数定义中已经有了一个可变参数,后面的命名关键字参数就不再需要特殊分隔符(加上会报错):

def person(name, age, *args,city, job):
    print(name, age, args, city, job)
person('Adam', 45,'M',city='shanghai', job='Engineer')
# 输出
Adam 45 ('M',) shanghai Engineer

标签:传参,city,函数,python,age,num,参数,print,name
From: https://www.cnblogs.com/pam-sh/p/18020520

相关文章

  • 【60行代码解决】2024年最新版python爬虫有道翻译js逆向
    一、表单参数sign加密sign:c0f36866a9c650144ed5bac4eba532a7这种32位一般是MD5加密1.搜索sign:2.点击去分别在每个**sign:某某某**处打上断点结果在这个断点断住了3.原代码constu="fanyideskweb",d="webfanyi"functionj(e){returnc.a.createHash......
  • 2024-02-18-物联网C语言(7-字符串处理函数)
    7.字符串7.1获取字符串的长度函数-strlen头文件:#include<string.h>函数定义:size_tstrlen(constchar*s)参数:s-指定的字符串返回值:当前字符串的长度#include<stdio.h>#include<string.h>intmain(intargc,charconst*argv[]){//使用strlen获取字符......
  • Python教程(27)——如何使用Python中的上下文管理器
    当我们在编写代码时,经常会遇到需要管理资源的情况,比如打开和关闭文件,如果遇到了一些异常情况,我们需要关闭资源,不然会导致资源泄露,虽然我们可以通过手动的方式来关闭,但如果有多个异常情况需要考虑的话,万一不小心漏了一处,就芭比Q了。所以,如果有一种更加优雅的方式来处理资源泄露的问......
  • 跨界协作:借助gRPC实现Python数据分析能力的共享
    gRPC是一个高性能、开源、通用的远程过程调用(RPC)框架,由Google推出。它基于HTTP/2协议标准设计开发,默认采用ProtocolBuffers数据序列化协议,支持多种开发语言。在gRPC中,客户端可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法,使得您能够更容易地创建分布式应用......
  • python相关知识
    1python原理Python先把代码编译成字节码,交给虚拟机执行。.pyc文件是字节码在磁盘上的表现形式字节码在虚拟机程序里面对应的对象是PyCodeObject对象(C++对象)PyCodeObjecttypedefstruct{PyObject_HEADintco_argcount;/*位置参数个数*/intco_nlocals;......
  • NewStarCTF 2023 WEEK2|REVERSE SMC 使用IDApython静态解决SMC
    先来一篇IDApyhotn的指令教程https://www.cnblogs.com/zydt10/p/17676018.html*自己编的这题对应的expa=[0x11,0x22,0x33,0x44]foriinrange(38):result=a[i&3]ida_bytes.patch_byte(0x403040+i,get_wide_byte(0x403040+i)^result)在IDA中运行完exp之后,......
  • 请编写函数fun,它的功能是:求出1到100之内能被7或者11整除, 但不能同时被7和11整除的所有
    /2.请编写函数fun,它的功能是:求出1到100之内能被7或者11整除,但不能同时被7和11整除的所有整数,并将他们放在a所指的数组中,通过n返回这些数的个数/#include<stdio.h>#include<string.h>intfun(int*buf){inti=1,j=0;for(i=1;i<100;i++){if(i%7==......
  • 1.m个人的成绩存放在score数组中,请编写函数fun, 它的功能是:将低于平均分的人数作为函
    /1.m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平均分的人数作为函数值返回,将低于平均分的分数放在below所指1定的数组中。/#include<stdio.h>#include<string.h>intfun(int*buf,int*buff,intnum){inti=0,j=0,sum=0;for(i=......
  • 用python脚本自动发送钉钉消息出现服务器异常的报错: HTTPSConnectionPool(host='oapi.
    一、问题描述执行python脚本发送钉钉消息,出现报错:HTTPSConnectionPool(host='oapi.dingtalk.com',port=443):Maxretriesexceededwithurl:/robot/send?access_token=43df999582e899dc6815c9d6346c9d253060259625c92e4f166e25ea58e5bdb5&timestamp=1708242748918&sign......
  • python 日期时间学习
    importdatetimeimporttimefromdatetimeimporttimedeltaclassTimeUtil:"""staticmethod:静态方法,参数没有要求,和类没有绑定关系,跟全局变量差不多classmethod:类方法,是一个函数修饰符,第一个参数是cls"""@staticmethoddefget_current_yea......