python局部变量获取_0701 Python 局部变量、全局变量

return:

一个函数return之后, 那么函数体中 return 后面所有语句都不会被执行,当遇到 return,程序就会跳出函数

一个函数如果不使用return关键字来指定返回到函数调用处的值, 那么默认返回None

示例:计算任意个数的整数和

def sum_count_1(*args, **kwargs):"""计算任意个数的整数和

:param args: 接受位置参数, 保存为元祖

:param kwargs: 接受关键字参数,保存为字典

:return:"""result=0for i inargs:

result+=ifor i inkwargs.values():

result+=ireturn result #一个函数return之后, 那么函数体中return后面所有语句都不会被执行, 当遇到return, 程序就会跳出函数

one_var = 10 #不会执行

#一个函数如果不使用return关键字来指定返回到函数调用处的值, 那么默认返回None

one_result = sum_count_1(1, 2, 3, 4, 5, 6, num1=7, num2=8, num3=9)print(one_result)

作用域:局部变量、全局变量

在函数体内部定义的变量, 为局部变量:所在区域为内部作用域(内部命名空间)

在函数体外部定义的变量, 为全局变量:所在区域为外部作用域(外部命名空间)

函数体内部变量的查找顺序

1. 当前函数内部作用域中查找有没有定义这个变量

2. 会去全局作用域中查找, 如果有同名的变量, 会直接获取

3. 会去系统模块

示例1:

defmanual_fn1():"""作用域"""

#在函数体内部定义的变量, 为局部变量:所在区域为内部作用域(内部命名空间)

num = 1

pass

#在函数体外部定义的变量, 为全局变量:外部作用域(外部命名空间)

num = 10

print("old num = {},id为{}".format(num, id(num)))

manual_fn1()print("new num = {},id为{}".format(num, id(num)))#执行结果:#old num = 10,id为8791307969648#new num = 10,id为8791307969648

示例2:

#在函数体外部定义的变量, 为全局变量:所在区域为外部作用域(外部命名空间)

num_x = 50

defmanual_fn2():"""在函数体内部定义的变量, 为局部变量:所在区域为内部作用域(内部命名空间)

函数体内部变量的查找顺序

1. 当前函数内部作用域中查找有没有定义这个变量

2. 会去全局作用域中查找, 如果有同名的变量, 会直接获取

3. 会去系统模块中查找, 如果系统模块中找不到, 那么会抛出NameError异常"""

print("内部的num_x值为:{}\nid为: {}".format(num_x, id(num_x)))print("外部的num_x值为:{}\nid为: {}".format(num_x, id(num_x)))

manual_fn2()

num_x= 100 #如果全局变量在末尾,执行时会报错,因为代码是从上到下执行的

示例3:

函数中的形参为局部变量(哪怕是与全局变量同名)

在函数体内部, 给变量赋值(创建变量), 那么一定为局部变量

num_z = 520

defmanual_fn4():#函数中的形参为局部变量(哪怕是与全局变量同名)

#print("内部的num_y值为:{}\nid为: {}".format(num_z, id(num_z)))

#在函数体内部, 给变量赋值(创建变量), 那么一定为局部变量

num_z = 100 #局部变量

print("内部的num_y值为:{},id为: {}".format(num_z, id(num_z)))print("1. 外部的num_z值为:{},id为: {}".format(num_z, id(num_z)))

manual_fn4()print("2. 外部的num_z值为:{},id为: {}".format(num_z, id(num_z)))

执行结果:1. 外部的num_z值为:520,id为: 34789264内部的num_y值为:100,id为: 8791195119536

2. 外部的num_z值为:520,id为: 34789264

示例4:global  声明为全局变量

使用global关键字之后,那么指定的变量一定为全局变量,如果全局变量本身存在(num_z)会被修改

num_z = 520

defmanual_fn5():#函数中的形参为局部变量(哪怕与全局变量同名)

global num_z #使用global关键字之后, 那么指定的变量一定为全局变量,如果全局变量本身存在会被修改

num_z = 100 #全局变量

print("内部的num_z值为:{}\nid为: {}".format(num_z, id(num_z)))print("1. 外部的num_z值为:{}\nid为: {}".format(num_z, id(num_z)))

manual_fn5()print("2. 外部的num_z值为:{}\nid为: {}".format(num_z, id(num_z)))

模块调用

任意一个py文件, 都可以当做是一个模块

py文件的名称, 一定要符合标识符的命名规范:数字 字母 下划线,不能以数字开头

py文件中定义的函数、变量、类都能被其他py文件导入之后,进行调用

方法一:import

import 模块名

可以直接通过 模块名.函数名 或者 模块名.变量名 来调用

方法二:as 取别名

使用 as 给模块取别名,那么可以直接使用 别名.函数 或者 别名.全局变量 来调用

使用from 模块名 import 函数名或者全局变量名 as 别名

方法三:使用from 模块名 import *       ==不推荐使用

会将模块中的所有方法和全局变量全部导入

那么可以直接使用导入的 函数名或者全局变量名

方法一:import模块名1, 模块名2import模块名1 as 模块别名

方法二:from 模块名1 import函数或者全局变量

方法三:不推荐from 模块名1 import *

导入模块时需要注意的点

1、如果相同的模块被导入多次,那么只有第一次会导入成功

2、当前py文件中定义了与导入模块中的函数或者全局变量同名时, 会将被覆盖   把导入的模块取别名

3、如果导入模块, 那么被导入模块中没有任何缩进的代码都会被识别(执行)

导入模块时导入顺序

1. python系统模块#random time math

2. 导入第三方模块#from openpyxl import load_workbook

3. 导入自定义模块#from Python_0703_module_file.one_module import *

导入模块后,程序执行时模块的搜索顺序

1. 在当前模块(py文件)进行搜索

2. 会去系统模块中进行搜索

main方法:if __name__ == "__main__":

1、python内置的程序入口的方法,可用于调试当前模块的代

2、当当前模块被导入进别的模块时,在别的模块调用当前模块的方法、变量时,此时__name__变量!='__main__',__name__=='被导入模块的名称'

__name__变量有什么特性?

Python中每运行一个py文件, 都会生成一个内置的__name__变量

而这个变量的值为__main__

如果把它当做一个模块, 导入到其他的py文件中, 那么__name__的值为当前模块名

练习题:

1.函数默认返回什么值? 返回值有哪些形式? 在函数体中, return会中断循环吗?

函数默认返回什么值?

None

返回值有哪些形式?

返回单个值

返回多个值(以逗号进行分割),为元祖类型

在函数体中,return会中断循环吗?

2.局部变量和全局变量是什么? 如何在函数内部修改全局变量?

局部变量和全局变量是什么?

局部变量:在内部作用域( 局部命名空间)中定义的变量

全局变量:在外部作用域( 全局命名空间)中定义的变量

如何在函数内部修改全局变量?

先使用global声明

再对全局变量进行赋值

3.局部变量的搜索顺序?

先局部命名空间

再全局命名空间

系统模块中

4.什么是模块?有什么作用?

什么是模块?

模块 好比是 工具包

每一个以扩展名 py 结尾的文件都是一个 模块

全局变量 、 函数、类 都是模块能够提供给外界直接使用的工具

有什么作用?

代码重用,提高工作效率

让代码更简洁

5.模块中的哪些资源可以被调用处使用?

全局变量 、 函数、类 都是模块能够提供给外界直接使用的工具

6.模块的命名规范

由字符、数字、下划线组成

不能与关键字重名

不能以数字开头

不能与系统内置的模块、函数、类重名

建议不要以下划线开头

建议不要使用中文

注意:如果在给 Python 文件起名时,以数字开头是无法在 PyCharm 中通过导入这个模块的

7.模块的导入方式有哪几种?

import 模块名1, 模块名2

import 模块名1 as 模块别名

from 模块名1 import 函数或者全局变量

from 模块名1 import *

8.编写如下程序,从键盘获取一个数字,然后计算它的阶乘,例如输入的是3,那么即计算3!的结果,并输出

提示:

a. 1!等于 1

b. 2!等于 1*2

c. 3!等于 1*2*3

d. n!等于 1*2*3*...*n

defis_int(int_num):"""检查int num是否为整数!"""

if isinstance(int_num, str): #判断是否为字符串类型

ifint_num.isdigit():returnTrueelse:returnFalseelif isinstance(int_num, int): #判断是否为整数类型

returnTrueelse:returnFalsedefcount_factorial(one_num):"""count one_num's fatorial数阶乘"""result= 1

if one_num <0:print("{}为负数,没有阶乘!".format(one_num))returnNoneelif one_num in (0, 1):return 1

else:for i in range(1, one_num + 1):

result*=ireturnresult

input_num= input("请输入一个正整数:")ifis_int(input_num):

input_num=int(input_num)print("{}的阶乘为:{}".format(input_num, count_factorial(input_num)))else:print("输入的{}有误,请输入一个正整数!".format(input_num))

9.编写如下程序,a.在一个模块中,定义求圆的面积和周长、长方形的面积和周长的函数,然后分别在另一个程序中调用

b.使用多种方式导入模块

创建homework_0701目录,在其中创建calculate_perimeter_area.py文件

importmathdef circle_area(r): #园 面积

"""圆 面积

:param r: 半径

:return: 面积"""area= math.pi * (r ** 2) #计算圆的面积

area = round(area, 3) #四舍五入,保留三位小数

returnareadefcircle_perimeter(r):"""圆 周长

:param r:半径

:return: 周长"""perimeter= 2 * math.pi * r #计算圆的周长

perimeter = round(perimeter, 3) #四舍五入,保留三位小数

returnperimeterdefrectangle_area(length, width):"""长方形 面积

:param length: 长度

:param width:宽度

:return:面积"""area= length * width #长方形面积

area = round(area, 2) #四舍五入,保留两位小数

returnareadefrectangle_perimeter(length, width):"""计算长方形周长

:param length: 长度

:param width: 宽度

:return: 周长"""perimeter= 2 * (length + width) #长方形周长

perimeter = round(perimeter, 2) #四舍五入,保留三位小数

returnperimeterif __name__ == "__main__":#此处用于测试函数

radius = float(input("请输入圆的半径(数字):"))print("半径为{:.2f}的圆,面积为{}, 周长为{}\n".format(radius,circle_area(radius), circle_perimeter(radius)))

rectangle_len= float(input("请输入长方形的长度(数字):"))

rectangle_width= float(input("请输入长方形的宽度(数字):"))

params=(rectangle_len, rectangle_width,

rectangle_area(rectangle_len, rectangle_width),

rectangle_perimeter(rectangle_len, rectangle_width))print("长为{:.2f}, 宽为{:.2f}的长方形,面积为{}, 周长为{}。".format(*params))

在homework_0701目录中创建module_import.py文件

#from homework_0701.calculate_perimeter_area import *

from homework_0701.calculate_perimeter_area import(circle_area, circle_perimeter, rectangle_area,

rectangle_perimeter, )#其他文件调用#此处用于测试函数

radius= float(input("请输入圆的半径(数字):"))print("半径为{:.2f}的圆,面积为{}, 周长为{}\n".format(radius, circle_area(radius), circle_perimeter(radius)))

rectangle_len= float(input("请输入长方形的长度(数字):"))

rectangle_width= float(input("请输入长方形的宽度(数字):"))

params=(rectangle_len, rectangle_width, rectangle_area(rectangle_len, rectangle_width),

rectangle_perimeter(rectangle_len, rectangle_width))print("长为{:.2f}, 宽为{:.2f}的长方形,面积为{}, 周长为{}。".format(*params))

10.编写如下程序,裴伯拉切数列,从第三个元素开始,每个元素为前两个元素之和,用户输入某个大于0的正整数,求出小于等于这个正整数的所有裴伯拉切元素

a.裴伯拉切数列为:0 1 1 2 3 5 8 13 21 34 55 89 144 ...

b.例如,用户输入50,那么小于等于50的裴伯拉切元素为:0 1 1 2 3 5 8 13 21 34

c.要求在一个模块中定义,在另一个程序中调用

1.在homework_0701中创建calculate_fifibonacci.py文件

deffibo(n):"""计算小于等于n的所有裴伯拉切元素

:param n:

:return:"""

if n <0:print("您输入的是{},请输入一个正整数!".format(n))returnNoneif n ==0:print(0)returnNone

a, b= 0, 1

while a

a, b= b, a +bprint()if __name__ == '__main__':#此处为测试代码

num_n = int(input("请输入一个正整数:"))

fibo(num_n)

2.在homework_0701中创建module_import_fifib.py文件

from homework_0701 importcalculate_fibonacci as cal_fibif __name__ == '__main__':

num_n= int(input("请输入一个正整数:"))

cal_fib.fibo(num_n)#执行结果

#请输入一个正整数:22

#0 1 1 2 3 5 8 13 21

*******请大家尊重原创,如要转载,请注明出处:转载自:https://www.cnblogs.com/shouhu/,谢谢!!*******

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值