python基础语法总结(二)-- 函数function

python常用系统函数方法与模块

python基础语法总结(一)-- python类型转换函数+文件读写

python基础语法总结(二)-- 函数function

python基础语法总结(三)-- 数与字符串

python基础语法总结(四)-- list列表

python基础语法总结(五)-- 字典dic + 元组tuple

python基础语法总结(六)-- python类与OOP面向对象特性


目录

一. 函数定义

二. 函数与入参

1. 函数传参的方式

2. 入参如果传入列表,可能被函数改变其中内容

扫描二维码关注公众号,回复: 4608762 查看本文章

3. 传递任意数量的实参

三. 匿名函数 lambda


一. 函数定义

函数定义使用def关键字,使用接下来是方法名和入参,最后是冒号:

函数方法体在第一行下面,并且缩进若干空格(一般习惯4格)。所有保持同一缩进

'''函数定义'''
def function_1(arg1, arg2):
    """定义一个函数"""                    # 函数的注释,会出现在help()的打印结果中
    print("arg1=" + arg1 + ", arg2=" + arg2)
    return

二. 函数与入参

1. 函数传参的方式

  1. 位置传参
  2. 关键字传参
  3. 入参默认值
'''函数传参方式'''
### 1 位置传参
function_1("1", "2")                # 打印 arg1=1, arg2=2,调用时将第一个入参"1"传入函数定义时的第一个参数arg1,第二个入参"2"传入arg2

### 2 关键字传参
function_1(arg1="1",arg2="2")       # 直接指定arg1传入"1", arg2传入"2"
function_1("1",arg2="2")            # 也可以只指定一个关键字入参,但必须放在最后


### 3 入参默认值
def function_2(arg1, arg2="2", arg3="3"):           # 定义函数时,直接对arg3入参设置默认值"3".有默认值的参数一定要放在最后
    print("arg1=" + arg1 + ", arg2=" + arg2 + ", arg3=" + arg3)

function_2("1","2","3")             # 打印arg1=1, arg2=2, arg3=3
function_2("1","2")                 # 即使没有传入arg3,也不会报错,默认arg3赋值"3",打印:arg1=1, arg2=2, arg3=3
function_2(arg3="3", arg1="1", arg2="2")    # 全部使用关键字传参时,顺序可以颠倒
function_2(arg1="1", arg2="2")              # 不传arg3也不报错,使用默认值

注意:在调用函数时,如果有位置传参和关键字传参两种方式
        1. 位置传参必须放在关键字传参之前
        2. 位置传参的顺序必须和函数定义时的顺序一致

###
"""注意:在调用函数时,如果有位置传参和关键字传参两种方式
        1. 位置传参必须放在关键字传参之前
        2. 位置传参的顺序必须和函数定义时的顺序一致
"""
# function_1(arg1="1","2") 这种写法会报错:positional argument follows keyword argument,不能将关键字传参放在位置传参前
# function_1("2",arg1="1") 这种写法会报错:got multiple values for argument 'arg1'
                                # 位置传参已经给arg1传入"2"(位置传参这个位置,只能传给arg1),后面又用关键字传参给arg1传入"1",因此系统报错
function_2("1", arg3="3", arg2="2")         # 当位置传参正确时,后面的关键字传参顺序可以打乱
function_2("1", arg3="3")                   # 当位置传参正确时,后面的关键字传参可以省略部分或全部
# 总之,要先列出没有默认值的形参,再列出有默认值的形参,要避免传参歧义

2. 入参如果传入列表,可能被函数改变其中内容

'''注意点:传入列表,入参可能被函数方法改变'''
l1 = list(range(1,10,2))                # l1 = [1, 3, 5, 7, 9]

def function_3(init_list):
    for i in range(len(init_list)):
        init_list[i] = init_list[i] + 1     # 每一项都加一
function_3(l1)                  # 调用function_3函数
print(l1)                       # l1会被改变,打印结果:[2, 4, 6, 8, 10]

要避免改变原入参,可以用以下实现:

### 避免改变原入参的实现
l1 = list(range(1,10,2))                # l1 = [1, 3, 5, 7, 9]
function_3(l1[:])                       # 传入l1的副本
print(l1)                               # l1 没有被改变,仍为[1, 3, 5, 7, 9]

3. 传递任意数量的实参

# 传递任意数量的实参
def multi_args(a, *args):          # 可传入多个参数,数量不定, 不定数量参数要放在最后;args是个空元组,并将传入的参数都放在args中
    print(args)
multi_args(1,2,3,6,5,4)         # 成功执行,打印:(2, 3, 6, 5, 4),a赋值为1

# 使用任意数量的关键字实参
def multi_key_args(a, b, **key_args):           #key_args本质上是空字典,并将传入的多个关键字入参都放入此参数中
    print(key_args)

multi_key_args(1, 2, first=3, second="ss")          #输出: {'first': 3, 'second': 'ss'}
# multi_key_args(1, 2, 9, first=3, second="ss")  这样写会报错 multi_key_args() takes 2 positional arguments but 3 were given, 说明**只能传入关键字的参数

三. 匿名函数 lambda

'''匿名函数 lambda关键字'''
fun = lambda x: x * x           # 使用lambda关键字,定义一个匿名函数,返回平方,并将这个匿名函数传给fun
fun(5)                          # 通过调用fun(x)来调用匿名函数,本例:25

### 匿名函数更多用在需要传递函数入参的地方
def function_out(a, fun):       # 准备工作,定义一个函数function_out(),其中第二个入参是函数类型的入参
    return fun(a) + 1
# 可以直接在调用某个函数时,在其入参的响应位置创建匿名函数并传参,起到精简代码的作用
result = function_out(3, lambda x: x + 5)           # 计算第一个入参+5之后再+1的值,本例:result = 9
result = function_out(3, lambda x: x ** 2)          # 计算第一个入参平方后再+1的值,本例:result = 10

猜你喜欢

转载自blog.csdn.net/u010086122/article/details/84983543