pyhon之函数参数

#函数的参数分为形参和实参,其中形参就是形式参数,是在创建函数的时候定义,实参就是实际参数,是在调用的函数的时候创建,这个并不是重点,具体#的参数内部,我们可以把参数分为以下4种# 1、普通参数# 2、默认参数# 3、指定参数# 4、动态参数

1、首先学习普通参数
#我们先来看下普通参数,也是最常用的参数,普通参数,实参和形参要一一对应,比如第一个实参必须要对应第一个形参,第二个实参必须要对应第二个
#形参,以此类推........

#普通参数,x对应123,y对应"abc"
def test_func(x,y):
    print(x,type(x))
    print(y,type(y))

test_func(123,"abc")

# 123 <class ‘int‘>
# abc <class ‘str‘>

2、然后在学习默认参数

#我们在来看下默认参数,默认参数可以允许我们在形参的位置给形参定义一个默认的参数,如果在实参的位置对该形参有对应的实参,则使用实参的值,
#如果在实参的位置没有该形参对应的实参,则使用默认的值,且默认参数必须要放在最后面,不能放在非默认参数的前面,如果放在非默认参数的前面,
#执行python代码将会报错

def test_func(x,y="b",z="c"):
    print(x,type(x))
    print(y, type(y))
    print(z, type(z))

#三个形参均有对应的实参,我们可以看到,最终的形参的值是对应的实参的值
test_func("1","2","3")

# 1 <class ‘str‘>
# 2 <class ‘str‘>
# 3 <class ‘str‘

#三个形参只有第一个有对应的形参,我们可以看到x和y的值为定义的默认值
test_func("a")
# a <class ‘str‘>
# b <class ‘str‘>
# c <class ‘str‘>

3、然后我们在来学习一下指定参数

#然后我们在来看下指定参数,上面的普通参数,第一个形参必须要对应第一个实参.......,用指定参数,则可以不受此约束
def test_func(x,y,z):
    print(x,type(x),id(x),sep="/",end="\n")
    print(y,type(y), id(y), sep="/", end="\n")
    print(z,type(z), id(z), sep="/", end="\n")

test_func(z="c",x="a",y="b")

# a/<class ‘str‘>/26879968
# b/<class ‘str‘>/26904800
# c/<class ‘str‘>/26850848

 

4、然后我们在来学习一下动态参数

#最后我们在来学习一下大名鼎鼎动态参数,动态参数有三种,分别为*args;**kwargs,*args,**kwargs
#首先来看下*args,*args主要用来接受多个普通参数,把多个普通参数全部放在args这个tuple中,如果实参传递一个list,如果直接传列表的名称
#则该列表整体会被当做一个参数,如果在列表的前面加一个*号,则会把列表中的每一个元素当做一个参数参数传递给args这个tuple
def test_func(*args):
    l = len(args)
    for i in range(l):
        print(args[i])

l1 = [0,1,2,3,4,5]
test_func(l1)
# [0, 1, 2, 3, 4, 5]

test_func(*l1)
# 0
# 1
# 2
# 3
# 4
# 5

test_func(0,1,2,3,4)

# 0
# 1
# 2
# 3
# 4

#下面我们在来看下**kwargs
def test_func(**kwargs):
    for k,v in kwargs.items():
        print(k,v)

d1 = {"k1":"v1","k2":"v2","k3":"v3"}

#这样传是错误的,python会报错,因为如果形参是**kwargs,需要传递x=y这样的结构,或者是字典前加**的结构
# test_func(d1)

#这样传才是正确的
test_func(**d1)
# k1 v1
# k2 v2
# k3 v3

#这样的传递方法也是正确的
test_func(x="1",y="2",z="3")
# x 1
# y 2
# z 3

5、最后我们在来看下大名鼎鼎的万能参数,完成参数可以接受任何人类可以想象到的参数

#最后是大名鼎鼎的万能参数,在下面的例子中,*args必须要放在前面,**kwargs必须要放在后面,python会自动把list形状的参数放在args中,
#把字典形状的参数放在kwargs中
def test_func(*args,**kwargs):
    i = len(args)
    for n in range(i):
        print(args[n])
    for k,v in enumerate(kwargs.items()):
        print(k,v,sep=":",end="\n")

l1 = [0,1,2,3,4,5]
d1 = {"k1":"v1","k2":"v2","k3":"v3"}

test_func(*l1,**d1)

# 0
# 1
# 2
# 3
# 4
# 5
# 0:(‘k1‘, ‘v1‘)
# 1:(‘k2‘, ‘v2‘)
# 2:(‘k3‘, ‘v3‘)

def test_func(*args,**kwargs):
    i = len(args)
    for n in range(i):
        print(args[n])
    for k,v in enumerate(kwargs.items()):
        print(k,v,sep=":",end="\n")

test_func(1,2,3,4,54,k1="v1",k2="v2",k3="v3")

# 1
# 2
# 3
# 4
# 54
# 0:(‘k1‘, ‘v1‘)
# 1:(‘k2‘, ‘v2‘)
# 2:(‘k3‘, ‘v3‘)

小伙伴们,python函数的参数我们就学习完了,如果有问题可以留言咨询!

时间: 2024-10-03 19:42:34

pyhon之函数参数的相关文章

python--函数的返回值、函数参数的使用、名称空间与作用域、函数嵌套、函数对象

今天学习内容有函数的返回值.函数参数的使用.名称空间与作用域.函数嵌套. 下来我们一一查看. 函数的返回值 看几个栗子: def func(x): return x**2 y=func(10) print(y) def foo(): return None res=foo() print(res) def foo(): return{'a':1} res=foo() print(res['a']) def foo(): return {'a':1},1,'a',[1,2] res=foo() p

python基础教程函数参数

python里有很多的内置函数给我们的工作带来了很多发便利,在我们实现某些功能或者优化代码的时候,可以自己定义一个函数,同时我们在定义一个类的时候也会用到函数的一些知识去构造一个方法,这里就涉及到一些关于函数的基础知识和函数传参的知识. 一.函数的相关介绍 1.函数定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可. 函数特性: 减少重复代码 使程序变的可扩展 使程序变得易维护 2.函数的定义示例 定义一个函数要使用def语句,依次写出函数名.括

C言语指针变量作为函数参数

在C言语中,函数的参数不只可所以整数.小数.字符等详细的数据,还可所以指向它们的指针.用指针变量作函数参数可以将函数内部的地址传递到函数外部,使得在函数外部可以操作函数内部的数据,而且这些数据不会跟着函数的完毕而被烧毁.像数组.字符串.静态分派的内存等多是一系列数据的聚集,没有方法经过一个参数全体传入函数外部,只能传递它们的指针,在函数外部经过指针来影响这些数据聚集.有的时分,关于整数.小数.字符等根本类型数据的操作也必需要借助指针,一个典型的例子就是交流两个变量的值.有些初学者能够会运用下面的

C++数组作为函数参数的几个问题(转)

本文需要解决C++中关于数组的2个问题:1. 数组作为函数参数,传值还是传址?2. 函数参数中的数组元素个数能否确定? 先看下面的代码. #include <iostream> using namespace std; void testArrayArg(int a[]) { cout << endl; cout << "in func..." << endl; cout << "array address: &qu

实现按行读取文件,把内容按照第三种内存模型打包数据传出,把行数通过函数参数传出。

/* 2 编写一个业务函数,实现按行读取文件.把内容按照第三种内存模型打包数据传出,把行数通过函数参数传出. 函数原型有两个,任意选择其一 要求1:请自己任意选择一个接口(函数),并实现功能:70分 要求2:编写测试用例.30分 要求3:自己编写内存释放函数 */ /********************************************************************** * 版权所有 (C)2015, Wu Yingqiang. * * 文件名称:ReadFi

javascript函数参数、返回值类型检查

实现带参数.返回值类型声明的js函数: 类型定义:window.Str = Type.Str = Type.define('STRING', Type.isStr);var Per = Type.define('PERSON', function(p){    return p && p.type === 'person' && p.name;}); 定义函数:var addStr = Str(function(a, b){  return a + b;}, Str, St

VBA自定义函数参数类型不符的错误

作者:iamlaosong 1.问题提出 编程中发现一个问题,系统总是提示编译错误,ByRef 参数类型不符, 可实际上参数定义没问题,原因在哪儿呢? 2.问题环境 假定函数定义如下: Function get_kind(addr As String) As Integer ...... End Function 调用过程: Sub check_address() Dim addr, new_addr(10000) As String ...... addr = new_addr(i) ....

一起入门python7之函数参数

上一节课简单的讲了一下函数.那么今天来给大家讲一下函数参数.用案例说话哈.上一节课只是让大家有比较简单的了解,那么这节我们来细化一下哈.>>>def hello(x):        #这里的x就是参数return x * x>>>hello(2)               #自动将x=2带入x*x当中去计算了.故得四.4>>>#大家想一下,倘若是次方的该怎么办?比如x的n次方.>>> def wa(x,n):    #首先先定义两

C++学习基础五之函数参数——形参

一.理论部分 C++中函数形参主要分为两类,如图1所示, 图1 总结: 一.当函数参数为非引用形参时,传进函数体内的是实参的拷贝,(注意,对于基本类型而言,拷贝的是实参的值,对于指针而言拷贝的是实参的地址) (1)若形参为非const的基本类型,则即可接收const实参,也可接收非const实参.只是在函数体内修改形参的值不影响实参的值. 因为对于基本类型的形参而言,传递进函数体的是实参拷贝的值,而不是实参本身,所以在函数体内修改实参的值不影响实参. (2)若形参为非const的指针类型,则即可