Python学习--第五天--作用域、函数嵌套、递归、匿名、模块导入

一、作用域:
1、分类:
局部作用域:在指定的小范围内生效(变量在特定的范围起作用,超出了范围,变量就失效了);函数内创建全局变量需要先用global声明变量,再给变量赋值
全局作用域:在所有的范围内生效
优先使用局部作用域
查看内置变量:print(vars()),会将Python自带的变量打印出来

i = 0  # 全局变量,全局作用域

def check():
    global i  # 局部作用域设置全局变量,使用global声明变量,再给变量赋值
    i = 5
    j = 1  # 局部作用域,局部变量,只在函数内起作用,出了函数就不能使用了
    print(i)
    print(j)


check()
print(j)  # 函数外调用函数里的局部变量就会报错
5
1
Traceback (most recent call last):
  File "D:/PycharmProjects/0412课程代码/0412_02.py", line 14, in <module>
    print(j)
NameError: name 'j' is not defined

Process finished with exit code 1

2、作用域优先级:
从内到外:优先查找局部作用域内存在的变量,如没有没有找到,依次向外递进

二、函数的嵌套,在一个函数内部重新定义一个函数
注意:内嵌函数/嵌套函数,不能直接在主程序中调用
语法1:
def 函数1():
def 函数2():
函数体

函数2()

例1:

# 嵌套一,函数里套函数
def name():
    print('张三')

    def age():
        print('18岁')

    age()
    return

name()
张三
18岁

Process finished with exit code 0

语法2:
def 函数1():
函数体

def 函数2():
函数1()
函数体
例2:

# 嵌套二,其他函数调用该函数
def max(x, y):
    return x if x > y else y


def maxs(a, b, c, d):
    res1 = max(a, b)
    res2 = max(res1, c)
    res3 = max(res2, d)
    return res3


print(maxs(10, 3, 443, 345))
443

Process finished with exit code 0

三、递归函数
语法:
def 函数名1():
函数体
return 函数名1()

调用:函数名()

例:

# 用递归函数求出4!的值
def sum1(num):
    if num == 1:  # 使用递归函数记得加判断条件退出递归,否则会造成死循环
        return 1
    print(num)
    return sum1(num-1)*num  # 在这里无限循环叠加内调sum1函数


print(sum1(4))
4
3
2
24

Process finished with exit code 0

四、匿名函数,关键字:lambda。
作用在于在程序执行时,快速构建一个功能简单的小型函数
语法:
lambda 参数:函数体
例:

# 编写一个匿名函数,能求出3个数的最大值
sum1 = lambda age1, age2, age3: max(age1, age2, age3)
print(sum1(2, 4, 1))
4

Process finished with exit code 0

五、模块导入,模块:就是‘.py’结尾的py源文件
注意:如果不同模块存在相同的函数名/变量名,同时导入到了主程序,后来的会覆盖先来的。所以我们使用as关键字将同名的函数/变量 赋别名,完成一个调用

模块分类:
内置模块:python底层提供,开发人员直接调用
自定义模块:开发人员自行编写的
第三方模块:是一种特殊的自定义模块,开发人员自行编写的模块,但是功能非常的强大,所以提交到了python社区供其他开发人员下载使用
第三方模块网站:https://pypi.org/

模块导入:
1、import:导入
语法:import 模块名

2、from…import…:导入
语法:
from 模块名/包名 import 具体函数/变量/模块

导入注意:
导入的话会先将导入模块执行一次,如果被导的模块里面存在可执行的代码,会在导入的模块中执行

例:我这里建了个导入包水泥厂,里面有个模块–水泥厂.py,模块里有个函数creat_shui()

# 导入方法一:直接导入.py文件里面的函数,这里需要去被导入模块的所在的包里面的__init__.py文件里放开该函数/变量名
# 在__init__.py文件输入:from .模块名 import 函数名/变量名
# 语法: from 水泥厂 import 函数名/变量名
# 调用方法:直接调用函数/变量即可
from 水泥厂 import creat_shui
def create_house():
    a = creat_shui()
    print('建房子需要:' + a)


create_house()


# 导入方法二:直接将包全部导入
# 语法:import 包名
# 调用时语法:包名.模块名.函数名
import 水泥厂
def create_house():
    a = 水泥厂.水泥厂.creat_shui()
    print('建房子需要:' + a)


create_house()


# 导入方法三:将包里面的单个模块导入
# 语法:from 包名 import 模块名
# 调用时语法:模块名.函数名
from 水泥厂 import 水泥厂
def create_house():
    a = 水泥厂.creat_shui()
    print('建房子需要:' + a)


create_house()

# import 使用as关键字将同名的模块/函数/变量 赋别名
# 语法:import 模块/函数/变量 as 别名
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值