python函数传参的几种方法

一、python中函数的参数类型分为以下五种:位置参数、默认参数、可变参数(*args)、关键字参数(**args)、命名关键字参数
二、位置参数

调用函数时传的实参与函数的形参位置上一一对应的参数,如下:

#!/usr/bin/python
# -*- coding: utf-8 -*-
def info(name,age,major):
    print("姓名:%s"%(name))
    print("年龄:%s"%(age))
    print("职业:%s"%(major))
info("zhulang",27,"IT")  #实参与形参一一对应

打印结果为:

姓名:zhulang
年龄:27
职业:IT
二、默认参数

在定义函数的时候,给形参一个默认的值,如下:

#!/usr/bin/python
# -*- coding: utf-8 -*-
def info(name,major,age=25): #默认参数必须放在位置参数后面,否则出错
    print("姓名:%s"%(name))
    print("年龄:%s"%(age))
    print("职业:%s"%(major))
info("zhulang","IT")

打印结果为:

姓名:zhulang
年龄:25
职业:IT

注意:
1、一个参数带参数名,另一个参数不带参数名,其中默认参数必须带参数名;
2、如果形参中默认参数在必须参数之前,那么调用函数时实参中默认参数也应当在前面;如果形参中默认参数在必须参 数之后,那么调用函数时实参中默认函数应当在后面,否则会报错

三、可变参数

可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个,*args将所有的实参的位置参数聚合到一个元组,并将这个元组赋值给args
如下函数:

def calc(l):
    sum = 0
    for n in l:
        sum += n
    return sum
calc([1,2,3]) #参数传入的是列表,结果为7

如果用可变参数类型传参,可变成如下:

def calc(*nums):
    sum = 0
    for n in nums:
        sum += n
    return sum

这样以来,参数可以传入任意多个,函数内部,参数接受到的是一个元组,传入参数时,可写成:cal(1,2,3,4),可跟多个参数,无限制写下去,如果有一个列表了,想把列表元素传进去,可写成如下:

>>> nums = [1, 2, 3]
>>> calc(*nums)
7

*nums表示把nums这个list的所有元素作为可变参数传进去

四、关键字参数

关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict,在传递参数时用等号(=)连接键和值

def person_info(name, age, **kw):
    print("name", name, "age", age, "other", kw)
>>> person_info("zhulang", 12)
name zhulang age 12 other{}
>>> person_info("zhulang", 27, city = "Beijing")
name zhulang age 27 other {'city':'Beijing'}
五、命名关键字参数

和普通关键字参数不同,命名关键字参数需要一个用来区分的分隔符*,它后面的参数被认为是命名关键字参数

#这里星号分割符后面的city、job是命名关键字参数
person_info(name, age, *, city, job):
    print(name, age, city, job)
 
>>> person_info("zhulang", 17, city = "Beijing", job = "Engineer")
zhulang 17 Beijing Engineer    #看来这里不再被自动组装为字典

总结:参数在书写时要遵循一定的顺序,即:位置参数、默认参数、变长参数、关键字参数、命名关键字参数

  • 12
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Python中,可以通过使用`multiprocessing`模块来创建多进程,并传递参数给进程函数。以下是几种常见的方法: 1. 通过`args`参数传递单个参数: ```python import multiprocessing def process_function(arg1, arg2): # 在这里编写你的进程逻辑 # ... if __name__ == '__main__': arg1 = 10 arg2 = "Hello" process = multiprocessing.Process(target=process_function, args=(arg1, arg2)) process.start() process.join() ``` 在上述示例代码中,我们通过`args`参数将两个参数`arg1`和`arg2`传递给进程函数`process_function`。 2. 通过`kwargs`参数传递命名参数: ```python import multiprocessing def process_function(arg1, arg2): # 在这里编写你的进程逻辑 # ... if __name__ == '__main__': arg1 = 10 arg2 = "Hello" process = multiprocessing.Process(target=process_function, kwargs={'arg1': arg1, 'arg2': arg2}) process.start() process.join() ``` 在上述示例代码中,我们通过`kwargs`参数将两个命名参数`arg1`和`arg2`传递给进程函数`process_function`。 3. 使用全局变量传递参数: ```python import multiprocessing # 定义全局变量 arg1 = 10 arg2 = "Hello" def process_function(): # 在这里编写你的进程逻辑,可以直接访问全局变量arg1和arg2 # ... if __name__ == '__main__': process = multiprocessing.Process(target=process_function) process.start() process.join() ``` 在上述示例代码中,我们将参数`arg1`和`arg2`定义为全局变量,在进程函数中可以直接访问这些全局变量。 需要注意的是,在使用多进程时,参数传递会通过序列化和反序列化进行,因此传递的参数必须是可序列化的类型。如果需要传递复杂的对象或不可序列化的对象,可以考虑使用`multiprocessing.Manager`提供的共享内存对象来进行进程间通信。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值