python进阶版 (新手向)

python函数;

定义:函数是可以重复执行的代码,可以重复调用,主要用于封装代码块。

2.1 def语句

用于创建函数即定义

用法:代码块以def为开头, 后面跟函数标识符名称,标识符名后是圆括号(),在代码块内,函数为变量。

表示为:

def sum_list(numbers):

1.既可以有参数函数创建   2.也可以无参数函数创建

2.函数有自己的名字空间,在函数外部不可以访问函数内部的变量,在函数内部可以访问函数外部的变量,但不能轻易对其改变

3.return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None。是一个返回值。

函数表达式内正常以return结束并返回值,如果没有return,会返回一个None。

3.函数参数

def greet(name):
    print(f"hello,{name}!")
greet("Alice")
  • 在函数 greet 中,name 是形参,它表示函数期望接收的数据。
  • 当你调用 greet("Alice") 时,字符串 "Alice" 是实参,它提供了一个具体的值给形参 name
3.1 实际参数;

参数传入;

(1)位置传参,

位置形参跟关键形参可以混用,但是位置传参要放在关键字传参前面“,上述例子则是个错误示范。

    实际参数传递时,实参和形参按位置来依次对应;

def myfun1(a, b, c):
    print('a=', a)
    print('b=', b)
    print('c=', c)
myfun1(1, 2, 3)

上面例子就是按位置传参。

(2)关键字传参

     实际参数传递时,实参和形参 按名称依次对应;

def myfun1(a, b, c):
    print('a=', a)
    print('b=', b)
    print('c=', c)
myfun1(c=33, a=11, b=22)

上面例子则是按关键字传参。

(3)序列实参(将序列拆分后传入)

  (4)字典传参

3.2形式参数

1.星号元组形参(将位置实参合并为一个元组)

写法为:*arg   def fun01(*arg)

作用:可以用于收集多余的位置实参

转成元组输入到函数内

2.双星号字典形参

写法:通常命名为**kwargs,输入字典到函数内

作用:收集多余的关键字实参

3.命名关键字形参

return

return在函数表达式内的作用为返回值,如果不设定返回值的话,默认返回None;

输出结果为300

4.匿名函数

用于一个需要临时小函数的位置,创建一个匿名函数对象

  • 同 def 类似,但不提供函数名

  • [函数的参数列表]是函数的参数,可以有零个或多个参数,参数之间用逗号分隔。

  • : 表达式是函数的返回值,通常是一个表达式,匿名函数会计算这个表达式并返回结果。


5.变量作用域

一个变量声明以后,在哪里能够被访问使用,就是这个变量"起作用"的区域:也就是这个变量的作用域

LEGB

局部变量;
定义:

局部变量是在函数内部定义的变量。
它们的作用域仅限于定义它们的函数内部。

全局变量;
定义:

全局变量是在函数外部定义的变量。
它们的作用域覆盖整个模块(文件)。

5.3局部作用域修改全局变量

在函数内部 提前用global声明 函数内部的某个变量为全局的变量

将局部外的变量前缀加上global,

  • 作用

    告诉python 的解释执行器, global 语句声明的一个或多个变量, 这些变量是全局变量

例如;

  • 全局变量如果要在函数内部被赋值,则必须经过全局声明 global

  • 默认全局变量在函数内部可以使用,但只能取值,不能赋值

5.4局部作用域修改外部变量

在函数内部 提前用nonlocal声明 函数内部的某个变量为外部的变量

说明:

(1)变量的查找顺序还是遵从:LEGB顺序

在 Python 中,LEGB 代表四种作用域的查找顺序:Local、Enclosing、Global 和 Built-in。

(2)局部作用域中若要修改外部函数嵌套作用域中的变量需要使用:nonlocal 语句

  • 格式:nonlocal 变量名

  • 作用:将局部作用域中变量声明为外部函数嵌套作用域中的变量。


LEGB 规则
  1. Local (局部作用域)

    • 这是函数内部定义的变量。
    • 局部变量只在定义它们的函数或代码块内部可见。
    • 例如,在函数内部定义的变量就是局部变量。
  2. Enclosing (闭包作用域)

    • 这是指外部函数中定义的变量,这些变量对嵌套在其中的内部函数可见。
    • 当你有一个函数 A 内部定义了另一个函数 B 时,A 中的变量对于 B 来说是闭包作用域。
    • 使用 nonlocal 关键字可以修改闭包作用域中的变量。
  3. Global (全局作用域)

    • 这是在模块级别(文件顶层)定义的变量。
    • 全局变量在整个模块中都可见。
    • 使用 global 关键字可以在函数内部声明并修改全局变量。
  4. Built-in (内置作用域)

    • 这是由 Python 自身提供的内置名称,如 printlenrange 等。
    • 内置作用域是所有作用域中最外层的作用域。
    • 通常情况下,你不应该重写内置名称,除非你有特殊需求

函数的内存分配

1、将函数的代码存储到代码区,函数体中的代码不执行。

2、调用函数时,在内存中开辟空间(栈帧),存储函数内部定义的变量。

3、函数调用后,栈帧立即被释放。

不可变类型:

int,float,bool,None,元组

可变类型:

列表,字典,集合


六.递归

即函数直接或间接的调用自身,递归通常用来解决可以被分解为更小的相同问题的问题。在使用递归时,需要确保有两个关键要素:

1.基准情况:

这是递归终止的条件。没有有效的基准情况会导致递归无限进行下去,最终导致栈溢出错误。

2.递归步骤:

在这一步中,函数会调用自身来处理规模更小的子问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值