day12局部变量 全局变量

局部变量:
1.定义在函数内部的变量称为局部变量(函数的形参也是局部变量)
2.局部变量只能在函数内部使用
3.局部变量在函数调用时才能被创建,在函数调用结束之后自动销毁
全局变量:
1.定义在函数外部,模块内部的变量称为全局变量
2.所有的函数都可以直接访问全局变量,但是函数内部不能直接通过赋值语句来改变全局变量
局部变量说明:
1.在函数内首次对变量赋值是创建局部变量,再次为变量赋值是修改全局变量的绑定关系
2.在函数内部的赋值语句不会对全局变量造成影响
3.局部变量只能在其被声明的函数内部访问,而全局变量可以在整个模块内访问
---------------------------------------------------------------------------------------------------------------------------------
练习:创建一个全局变量 l = []
写一个函数:
def input_number():
读入正整数,放到l列表
input_number()
print(l)  1,2,3
input_number
print(l)  1,2,3,4,5
---------------------------------------------------------------------------------------------
l = []
def input_number():
    list = []
    while True:
        num = int(input("请输入一个整数") or "-1")
        if num < 0:
            break
        list.append(num)
    return list
l += input_number()
print(l)
l += input_number()
print(l)
---------------------------------------------------------------------------------------------------------
globals() 函数和locals函数:
globals() 返回当前全局作用域内变量的字典:
locals() 返回当前局部作用域内变量的字典:
函数变量:
函数名是变量他在创建时绑定一个函数:
示例:
一个函数可以作为另一个函数实参传递:
示例:
def f1():
print("f1被调用")
def f2():
print("f2被调用")
def fn():
print("fn绑定的是:",fn)
fn
fx(f1)
fs(f2)
函数作为另一个函数的返回值:
示例:
def get_op():
    s = input("请输入一个整数")
    if s = "求最大":
        return max
    elif s == '求最小'
        return min
    elif s == '求和'
        return sum
L = [1,2,3,4]
fx = get_op
print(fx(L))
---------------------------------------------------------------------------------------------------------------------------------
函数的嵌套定义:
函数嵌套定义是指一个函数里用def语句创造其他函数的情况:
示例:
def fun_outer():
    print("fun_outer被调用")
    #创建另一个函数:
    def fun_inner():
        print("fun_inner被调用")
    fun_inner()
    fun_inner()


    print("fun_outer结束")
    return fun_inner
fun_outer()  #
----------------------------------------------------------------------------------------------------------------------------------
Python的作用域:
作用域也叫命名空间,是访问变量时查找变量名的范围空间
Python的四个所用域:LEGB
作用域 英文解释 英文缩写
局部变量作用域(函数内) Local(function) L
外部嵌套函数的作用域 Enclosing function locals E
函数定义所在模块(文件)的作用域 Globals(module) G
Python内置模块的作用域 Builtin(Python) B
--------------------------------------------------------------------------------------------------------------------------------
示例:
v = 100
def fun1():
    v =200
    print("funl.v",v)
    def fun2():
        v =300
        print("fun2.v=",v)
    fun2()
fun1()
print("全局的v=",v)
--------------------------------------------------------------------------------------------------------------
变量名的查找规则:
1.在访问变量时先查找本地变量,然后是包裹此函数外部的函数内部的变量,之后是全局变量,最后是内置(内建)变量
                        L  --------->    E    --------->     G  ---------->  B
2.在默认情况下,变量名赋值会创造或者改变本地作用域变量
global 语句:
作用:
1.告诉解释器,global语句声明的一个或多个变量,这些变量的作用域为模块级的作用域(也称全局变量),
2.全局声明(global):将赋值的变量模块映射到模块文件内部的作用域:
语法:
global 变量1 变量2
示例:
global v,a,b,c
global d
------------------------------------------------------------------------------------
global说明:
1.全局变量如果要在函数内部被赋值,则必须经过全局变量声明(否则会被认为是局部变量)
2.全局变量在函数内部不经过声明就可以直接访问
3.不能先创造局部变量,在用global声明为全局变量,此做法不符合规则
4.global变量列表里的变量名不能出现在此作用域内形参列表里
-----------------------------------------------------------------------------------------------------------------
练习:
写一个函数名
def hello(name):
...
count = 0
hello("小张")
hello("小李")
print("函数hllo已经被调用%d" % count)
hello("小赵")
print("函数hllo已经被调用%d" % count)
------------------------------------------------------------------------------------------------------------------
def hello(name):
    global count
    count += 1
    print("您好",name)
count = 0
hello("小张")
hello("小李")
print("函数hello已经被调用%d" % count)
hello("小找")
print("函数hello已经被调用%d" % count)
----------------------------------------------------------------------------------------------------------------------------
nonlocal 语句:
作用:
告诉解释器,nonlocal声明的变量不是局部变量,也不是全局变量,而是外部嵌套函数内的变量:
nonlocal 的语法:
nonlocal 变量名1, 变量名2,...
示例:
--------------------------------------------------------------------------------------------------------------------------
var = 100
def f1():
    var = 200
    print("f1李var",var)
    def f2():
        nonlocal var  #f2以外,全局变量以内
        var = 300
    f2()
    print("jieshu",var)
f1()
------------------------------------------------------------------------------------------------------------------------
说明:
1.nonlocal 语句只能在被嵌套的函数内部进行使用
2.访问nonlocal变量将对外部嵌套函数作用域内的变量进行操作
3.当有两层或两层以上函数嵌套时,访问nonlocal变量只对最近一层的变量进行操作
3.nonlocal语句的变量列表里的变量名,不能出现在此函数参数列表中
-------------------------------------------------------------------------------------------------------------------------
lambda 表达式(又称匿名函数)
作用:
创建一个匿名函数对象,同def类似,但不提供函数名,
语法格式:
lambda [形参1,形参2,形参3....] : 表达式
示例:
myadd = lambda a  ,b : a + b 
print("10+20=",myadd(10,20))
print("30+40=",myadd(30,40))

说明:
1.lambda只是一个表达式,它用来创建一个函数对象
2.当lambda表达式调用时,先执行冒号(:)后的表达式,并返回表达式的结果的引用:
3.lambda是表达式创建的函数只能包含一条表达式,lambda比函数更简单且可以随时创建和销毁,有利于减少程序的偶合度
--------------------------------------------------------------------------------------------------------------------
练习:
写一个lambda表达式,判断这个数的2次方+1是否能被5整除,是否能被5整数,如果能整除返回True,否则返回False,否则返回False
fx = lambda n:....
print(fx(3))
print(fx(4))
---------------------------------------------------------------------------------------------------------
fx = lambda n : (n ** 2 + 1) % 5 == 0
2.写一个程序lambda表达式求两个变量的最大值
def mymax():

mymax = lambda 
print(mymax(100,200))
def mymax(x,y):
    return x if x > y else y
mymax = lambda x,y : x if x > y else y
mymax = lambda x,y : max(x,y)
print(mymax(100,200))
-----------------------------------------------------------------------------------------------------------------
练习:
写一个函数mysum(n),给出一个数n写一个函数来计算1+2+3+4+5+6+...+n的和(要求用函数来做)
def mysum(n)
print(mysum(100))
2.写一个函数myfac来计算n!(n的阶乘)n!=1*2*3*4*5*6*7*8*...*n
def myfac(n):
...
print(myfac(5))
3.给出一个数n,写一个函数计算:
1+2**2+3**3+4**4+n**n的和  (n给个小点的数)
4.修改之前的student_information.py学生信息管理项目为项目添加菜单界面
+-----------------------+
|  1.添加学生信息           |
|  2.显示学生信息           |
|  3.删除学生信息           |
|  4.修改学生成绩           |
|  5.退出程序                  |
+-----------------------+ 
请选择:
(要求:每个功能至少对应一个函数)




















































































































猜你喜欢

转载自blog.csdn.net/robin13438235412/article/details/80754040