第五章 python的函数(2):函数的参数

上一篇我们介绍了python函数的一些定义和基本的构成。
接下来我们介绍下函数的参数。

什么是函数的参数呢?
当我们定义函数的时候,经常会希望函数能够处理我们传入的数据。
这样可以更具有灵活性和通用性。
传给函数数据时,我们就会使用到参数。

参数有两种:形参(形式参数),实参(实际参数)。

5.3.1 参数

参数用来把数据传给函数,让函数利用这个数据来执行

  • 参数的特点:

    • 参数可以是多个
    • 严格按照顺序传参数:位置方式传参
    • 定义了几个参数就得传几个
    • 实际参数可以传任意类型
1. 形参和实参

形参-形式参数:在函数定义时定义的参数就是形参。
实参-实际参数:当调用函数是,交给函数的参数就是实际参数。

下面简单的代码来举例:

def get_list_first_data(aaa):  # aaa叫做形参(形式参数)
    v = [11,22,33,44]
    print(v[aaa])

get_list_first_data(1)  # 1叫做实参(实际参数)

执行结果:

22

定义的形参(定义的是默认参数,万能参数的情况除外)和传入的实参需要数量相符。

2. 默认参数(default parameter)

默认参数:设置了默认值得参数。

  • 默认参数规则:

    • 默认参数必须定义在非默认参数之后(原因:不放在后面传入实参的时候会混乱)

参数的默认值,如果是可变类型,---有坑

def func(a1, a2=9):  # a2默认值是9。a2(default parameter)必须定义在在a1(non-default parameter)的后面
    pass

# 调用
func(1)  # a1=1,a2=9
func(2,3)  # a1=2,a2=3
3. 位置传参(positional arg),关键字传参(key arg)

位置参数:按定义的顺序传入参数(不使用关键字)。

关键字参数(又称关键参数,指定参数):指定关键字(形参名)来传入参数。关键参数不用按顺序传入。

  • 传入实参的原则:

    • 【实参:位置传参在前,关键字传参在后】
def func1(a1,a2,a3=1,a4=2):
    print(a1,a2,a3,a4)

func1(11,22)  # 位置传参a1=11,a2=22。默认参数a3=1,a4=2
func1(11,22,33)  # 位置传参
func1(11,22,33,44)  # 位置传参
func1(11,a2=22,a3=33)  # a2=22,a3=33是关键字传参
# func1(11,a2=22,33)  # 报错,关键字后面的参数也必须有关键字
4. 万能参数(非固定参数) ‘*‘ (元组)

参数一般命名为‘*args‘,这个参数可以接受任意个位置参数,并转换为元组(即使只有一个元素也会转换)传入函数。

参数名可以自定义,但是推荐用args
不确定这个函数接受多少参数的时候使用

  • 一般命名为 *args
  • *args 可以接受任意参数,并将参数转换成元组。
    • 有 * :将实参的元素循环放入元组(可以使列表,元组)
    • 无 * :将实参本身放入元组
  • *args 只支持位置传参
def func1(*args):  # 一般情况下万能参数推荐命名为 *args
    print(args)  # 调用的时候不要 *

func1(1,2)  # 输出元组(1,2)
# 无*和有*
func1((11,22,33,44,55))  # 输出元组套元组((11, 22, 33, 44, 55),)
func1(*(11,22,33,44,55))  # '*'将元素循环放入*参数的元组中(打散放入),输出(11, 22, 33, 44, 55)
func1(1,2,*[11,22,33],*(111,222,333),*{1111,2222})  # 列表,元组,集合都能拆开放进去。注意集合无序

输出结果:

(1, 2)
((11, 22, 33, 44, 55),)
(11, 22, 33, 44, 55)
(1, 2, 11, 22, 33, 111, 222, 333, 2222, 1111)

一般参数和万能参数一起用:

  • 同样适用于【实参:位置参数在前,关键字参数在后的原则】
def func2(a1, *args):
    print(a1, args)

func2(1,2,3,4,5,a2=6)  # 当参数在万能参数后面,只能用关键字传参。 很少用
                       # a1=1,args=(2,3,4,5),a2=6
5. 万能参数(非固定参数) ‘**‘ (字典)

参数一般命名为‘**kwargs‘,这个参数可以接受任意个关键字参数,并转换为字典传入函数。

  • 一般命名为**kwargs
  • 只能用关键字传参
  • **kwargs 可以接受任意个关键字参数,并将参数转换成字典。
    • 有 ** : 可以直接传入一个字典
    • 没 ** : 只能以关键字参数追加到字典中
def func1(**kwargs):
    print(kwargs)

func1(k1='a',k2=123)  # {'k1':'a', 'k2':123}
# 有**和无**
func1(**{'k1':'a', 'k2':123})  # {'k1':'a', 'k2':123}
func1(k1={'k1':'a', 'k2':123},k2=123)  # {'k1':{'k1':'a', 'k2':123}, 'k2':123}
func1(k1=1,**{'k2':2,'k3':3})  # 这个违背了关键字参数在后的原则,不过很少见

执行结果:

{'k1': 'a', 'k2': 123}
{'k1': 'a', 'k2': 123}
{'k1': {'k1': 'a', 'k2': 123}, 'k2': 123}
{'k1': 1, 'k2': 2, 'k3': 3}

一般*args和**kwargs 一般会一起出现

def func1(*args,**kwargs):
    print(args,kwargs)

func1(*[1,2,3],k1=2,k2=3,k3=4)
func1(*[1,2,3],**{'k1':2,'k2':3})
func1(111,222,*[1,2,3],k1='aaa',**{'k2':'bbb','k3':'ccc'})

执行结果:

(1, 2, 3) {'k1': 2, 'k2': 3, 'k3': 4}
(1, 2, 3) {'k1': 2, 'k2': 3}
(111, 222, 1, 2, 3) {'k1': 'aaa', 'k2': 'bbb', 'k3': 'ccc'}
6. 常用函数方式
  1. 定义函数
def func1(a1,a2):
    pass

def func2(a1,a2=None):
    pass

def func3(*args,**kwargs):
    pass
  1. 调用函数
    原则:【实参:位置传参在前,关键字传参在后】

以上就是python中关于参数的一些介绍。
下一篇我们介绍一下函数的返回值。

原文地址:https://www.cnblogs.com/py-xiaoqiang/p/11064232.html

时间: 2024-08-29 22:22:43

第五章 python的函数(2):函数的参数的相关文章

萌新向Python数据分析及数据挖掘 第一章 Python基础 第八节 函数

第一章 Python基础 第八节 函数 定义函数 函数 其实就可以理解为外挂,把一些常用的.重复率比较多你又不想重复写的东西写进函数,加上开关实现简化操作 举个简单的例子 1 def greet_user(username): 2 #定义一个叫做"迎接用户"的外挂,让他能直接打印一个问候语,括号里面是函数需要输入的东西,也就是个性化的东西 3 """先是简单的问候语""" 4 print("Hello! "

第五章 Python 函数

第1章 为什么要使用函数 #1.代码的组织结构不清晰,可读性差 #2.遇到重复的功能只能重复编写实现代码,代码冗余 #3.功能需要扩展时,需要找出所有实现该功能的地方修改之,无法统一管理且维护难度极大 第2章 函数是什么 定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要执行这个函数,只需要调用函数名即可. 特性: 1.减少重复代码 2.使程序变的可扩展 3.使程序变得易维护 函数的使用必须遵循:先定义,后调用 2.1 函数的分类 1. 内置函数:python解释器自带的函数,py

第五章 Python函数

函数作用:把一些复杂的代码封装起来,函数一般都是一个功能,用的时候才调用,提高重复利用率和简化程序结构. 5.1 语法 def functionName(parms1, parms2, ...):    code block    return expression 函数以def关键字开头,空格后跟函数名,括号里面是参数,用于传参,函数代码段里面引用. 5.2 函数定义与调用 # 定义函数 >>> def func(): ...   print "Hello world!&qu

《python解释器源码剖析》第12章--python虚拟机中的函数机制

12.0 序 函数是任何一门编程语言都具备的基本元素,它可以将多个动作组合起来,一个函数代表了一系列的动作.当然在调用函数时,会干什么来着.对,要在运行时栈中创建栈帧,用于函数的执行. 在python中,PyFrameObject对象就是一个对栈帧的模拟,所以我们即将也会看到,python虚拟机在执行函数调用时会动态地创建新的PyFrameObject对象.随着函数调用链的增长,这些PyFrameObject对象之间也会形成一条PyFrameObject对象链,这条链就是对象x86平台上运行时栈

第三章 Python基础——文件操作&函数 续

3.6函数进阶 名称空间:name space 例:若变量X=1,1存放于内存中,那存放X与1绑定关系的地方就叫做名称空间. 名称空间共三种,分别如下: locals:是函数内名称空间,包括局部变量和形参 globals:全局变量,函数定义所在模块的名字空间 builtins:内置模块的名字空间 不同变量的作用域不同就是由于这个变量所在的命名空间决定的. 作用域即范围: 全局范围:全局存活,全局有效 局部范围:临时存活,局部有效 注:查看作用域方法 globals(),locals() 作用域查

第五章 python中正则表达式的使用

第一节    正则表达式的一些介绍 1)掌握正则表达式的案例 2)写一个小爬虫 3)正则表达式(或RE)是一个小型的.高度专业化的编程语言,(在python中)它内嵌在python中,并通过re模块实现. - 可以为想要匹配的相应字符串集指定规则 - 该字符串集可能包含英文语句.e-mail地址.命令或任何你想搞定的东西 - 可以问诸如“这个字符串匹配该模式吗?” - “在这个字符串中是否有部分匹配该模式呢?” - 你也可以使用RE以各种方式来修改或分割字符串. 4)正则表达式模式被编译成一系列

第十五章 Python多进程与多线程

15.1 multiprocessing multiprocessing是多进程模块,多进程提供了任务并发性,能充分利用多核处理器.避免了GIL(全局解释锁)对资源的影响. 有以下常用类: 类 描述 Process(group=None, target=None, name=None, args=(), kwargs={}) 派生一个进程对象,然后调用start()方法启动 Pool(processes=None, initializer=None, initargs=()) 返回一个进程池对象

第五章 python中的异常处理

每种编程语言都会有自己的异常处理机制,虽然各有特色,但基本上都差不多,那么python中强大异常处理机制是什么样的呢? 一.异常: python用异常对象来表示异常情况,遇到错误后,会引发异常.如果异常对象并未被处理或捕获,程序会用回溯终止执行: 1 >>> 1/0 2 Traceback (most recent call last): 3 File "<stdin>", line 1, in <module> 4 ZeroDivisionE

python第五章函数

第五章 函数 5.1三元运算/三目运算 v = 前面 if 条件语句 else 后面 #如果条件成立,"前面"赋值给v,否则后面赋值给v. v = a if a>b else b # 取a和b中值较大的赋值给v # 让用户输入值,如果值是整数,则转换成整数,否则赋值为None data = input('请输入值:') value = int(data) if data.isdecimal() else None 5.2 函数 5.2.1.函数介绍 截止目前为止,都是面向过程式编