python基础(一) 您所在的位置:网站首页 function函数参数传递 python基础(一)

python基础(一)

2023-01-02 04:19| 来源: 网络整理| 查看: 265

一、函数语法

函数是封装特定功能的语句块,表示一个功能或行为,可重复调用。作用是提高代码的可维护性和可重用性。

1.1 函数的定义

函数定义格式是:

def function_name( parameters ): "函数体" return [expression] function_name:函数名,注意遵守变量命名规范parameters:函数的形式参数信息,可以为空(),是调用者传递给定义者的信息return [expression]:函数的返回信息,是定义者传递给调用者的信息,函数无返值回时可以省略(等价于return None)。 return语句同时也表示退出方法。 1.2 函数的调用

定义一个函数只是定义了一个功能,如果要使用这些功能,则需要调用函数。 python函数的调用使用 function_name( parameters ),其中parameters为实参。

二、参数说明 2.1 可变对象传参和不可变对象传参 当传递的参数为不可变数据类型(数值型、布尔值、None空值、字符串、元组、固定集合)时,函数内部不会改变原数据的值;当传递的参数为可变数据类型(列表、字典、集合)时,函数内部会改变原数据的值。 如下代码 def fun01(x1): x1 = 5 def fun02(x2): x2[0] = 5 a = 123 b = [2, 3, 4] fun01(a) print(f"{a = }") # a = 123为数值类型,函数调用后未改变变量a值,改变的是栈帧中X1的指向,即新成一个x1对象 fun02(b) print(f"{b = }") #b = [1, 2, 3] 为列表,函数调用后修改了可变对象b的值 输出结果为: a = 123 b = [5, 3, 4]

综上,当传入的参数是可变对象且函数功能是修改传入的对象时,不需要通过返回值传递结果。

2.2 形参

默认形参 在定义函数时,给形参提供一个默认值,调用函数时,如果没有传值,则取定义的默认值。如果调用时传值,则使用实参传递的值。 示例:

def func01(a, b, c, d=1): print(f"a={a}, b={b}, c={c}, d={d}") func01(1,2,3) func01(a=1, b=2, c=3) func01(a=1, b=2, c=3,d=5)

运行结果:

a=1, b=2, c=3, d=1 a=1, b=2, c=3, d=1 a=1, b=2, c=3, d=51

默认形参,在认定默认值时需注意,定义了默认值的形参后面的参数,都需要提供默认值,否则会报错。 位置形参 与位置实参对应,形参和实参的值必须一一对应。 示例:

def func01(a, b,c): print(f"a={a} b={b} c={c}") func01(1,3,4)

运行结果:

a=1 b=3 c=10

星号元组形参

在参数前加一个星号,可以实现不定长序列参数。星号元组形参在参数传递时,先按位置一 一对应,其余变量合并为一个元组。 示例:

def func01(a, *arg,c): print(f"a={a} b={arg} c={c}") func01(1,3,4,5,6,c=10)

运行结果:

a=1 b=(3, 4, 5, 6) c=10

命名关键字形参

命名关键字形参,要求实参必须是关键字实参:

在不定长形参后面的形参,必须使唤用命名关键字传参。如果参数中出现单独的星号,则星号后面的参数必须使用关键字传参。

示例:

def func01(a, b, *arg, last): print(f"a={a} b={b} arg={arg} last = {last} ") def func02(a, b, *, last): print(f"a={a} b={b} last = {last} ") func01(1, 2, 3, 4, 5, last=8) func02(1, 2, last=8)

输出结果:

a=1 b=2 arg=(3, 4, 5) last = 8 a=1 b=2 last = 8

不定长关键字形参 在参数前加双星号,可以实现不定长命名关键字参数。双星号关键字形参在参数传递时,先按位置或关键字一一对应,其余关键字合并为了个字典。 示例:

def func02(a, b, **kwarg): print(f"a={a} b={b} kwarg={kwarg} ") func02(1, b=2, c=3, d=4, e=5)

输出结果:

a=1 b=2 kwarg={'c': 3, 'd': 4, 'e': 5}

强制位置形参

Python3.8 新增了一个函数形参语法 / 用来指明函数形参必须使用指定位置参数,不能使用关键字参数的形式。 示例:

def fun01(a, b, /, c, d, ): print(f"{a =}, {b =}, {c = }, {d = }") fun01(1, 2, 3, d=4)

形参a和b必须使用位置传参。

2.3 实参

位置实参 位置实参在传递时,实参与形参按位置一 一对应。 示例

def func01(a, b, c, d): print(f"a = {a}, b={b}, c={c}, d={d}") list1 = [1, 2, 3, 4] func01(1, 2, 3, 4) func01(*list1)

运行结果:

a = 1, b=2, c=3, d=4 a = 1, b=2, c=3, d=4

以上两种调用方式得到的结果是一样的,第2种方式为序列实参,当位置参数过多时,可以存入列表中,通过“*”拆分列表元素,此方法在传参时需注意,列表中元素的数量与形参数量一致。 关键字实参 关键字实参在传参时,实参与形参按关键字一一对应,关键字传参时,位置可以不对应。 示例:

def func01(a, b, c, d): print(f"a = {a}, b = {b}, c={c}, d={d}") dic1 = {"a":3,"b":1,"c":2,"d":4} func01(b=1, c=2, a=3, d=4) func01(**dic1)

运行结果:

a = 3, b = 1, c=2, d=4 a = 3, b = 1, c=2, d=4

以上两种方式得到的结果是一样的,第2种方式为字典实参,当关键字参数过多时,可以存入字典,通过“**”拆分字典元素,此方法在传参时需注意,字典中键名及数量需与形参名及数量一致。

三、匿名函数

Python 使用lambda表达式来创建匿名函数。lambda函数可以接收任意多个参数并返回单个表达式的值。语法格式为: lambda [arg1 [,arg2,…argn]]:expression

args:参数expression :结果为函数返回值的表达式

示例:

add = lambda a, b: a + b print(add(2, 3)) def mutiply(m): return lambda a: a + m m1 = mutiply(3) print(m1(2))

以上为lambda函数的简单示例,两种方式都是计算两个数的和,打印结果均为5。

四 变量的作用域 4.1 python的作用域

python 变量的作用域有局部变量、全局变量、嵌套变量及本地(内置)变量。

局部变量:存在于函数内部的变量,只能在函数内部使用 全局变量:文件顶层声明的全局变量,可以在模块内使用。 嵌套变量:函数中嵌套函数时,外层函数的变量作用域。可在外层函数和内层函数中使用。 本地变量:python内置的变量,归python解释器使用。

变量的使用顺序为:局部—>嵌套—>全局—>本地

4.2 局部修改全局变量

一般,全局变量定义后不对其进行修改,python不允许在局部修改全局变量,除非使用global关键字声明。 如下代码,在函数内使用global关键字声明全局变量a,就可以在函数内修改变量a的值,修改后打印结果为:6

a = 5 def fun01(): global a a = 6 fun01() print(a) 4.3 内层嵌套修改嵌套变量

python不允许在在内层函数修改外层函数的变量值,除非使用nonlocal 关键字声明。 如下代码,在内层函数使用nonlocal关键字声明a,就可以在内层函数内修改外层函数的变量a的值,修改后打印结果为:7

def outer(): a = 5 def inner(): nonlocal a a = 7 print(a) return inner() temp = outer()


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有