a = 100 # 这个变量是全局变量,在整个py文件里都可以访问
word = 'hello'
def test():
'''
这个函数就是用来讲局部变量和全局变量的
:return:
'''
a = 10
# 1. 在函数内部又定义了一个新的局部变量
# 可以理解为a 先赋值了 100,但是进入函数后有让a = 10,后来的赋值覆盖了原来的赋值
# 这个变量是在函数内部定义的变量,它是局部变量,只能在函数内部使用
print('函数内部a = {}'.format(a))
# 想在函数内部修改全局变量,使用global
x = 'hello'
global word
word = 'ko'
print('函数内部word = {}'.format(word))
# 使用内置函数来查看局部变量locals()和全局变量global()
print('locals = {},global = {}'.format(locals(), globals()))
test()
print('函数外部 a = {}'.format(a))
print('函数外部 word = {}'.format(word))
# 没写global之前
# 函数内部a = 10
# 函数内部word = ko
# 函数外部 a = 100
# 函数外部 word = hello
# 写了global之后
# 函数内部a = 10
# 函数内部word = ko
# 函数外部 a = 100
# 函数外部 word = ko
# 函数内部a = 10
# 函数内部word = ko
# locals = {'a': 10, 'x': 'hello'},global = {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000025075A1CB88>, '__spec__': None, '__annotations__': {}, '__builtins__': , '__file__': 'E:/PyCharm/code/20200728/demo.py', '__cached__': None, 'a': 100, 'word': 'ko', 'test': }
# 函数外部 a = 100
# 函数外部 word = ko
# 在python里,只有函数能够分隔作用域,作用域,变量起作用的区域
if 3> 2:
m = 'hi'
print(m)
print(globals())
# {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001330467CB88>, '__spec__': None, '__annotations__': {}, '__builtins__': , '__file__': 'E:/PyCharm/code/20200728/demo.py', '__cached__': None, 'a': 100, 'word': 'ko', 'test': , 'm': 'hi'}
# 所以尽量少使用 全局变量
# 函数的多个返回值
def test(a, b):
x = a // b
y = a % b
# 一般情况下,一个函数只会执行一个return语句
# 特殊情况下(fainally语句下),一个函数可能会执行多个return语句
# return 语句表示一个函数的结束
return x, y # (2,3) ------最常用元组
# return x, y # [2,3]
# return {'x': x, 'y': y} # {'x': 2, 'y': 3}
result = test(13, 5)
print('商是{},余数是{}'.format(result[0], result[1]))
shang, yushu = test(16, 3)
print('商是{},余数是{}'.format(shang, yushu))
# 函数的回顾总结
# 函数的声明,使用关键字def 来声明一个函数
# 函数的格式 def 函数名(形参1,形参2,。。。。)
# 函数的调用 函数名(实参1.实参2。。。。)
# 函数的返回值 使用return 语句返回 函数的执行结果
# 函数返回多个值,将多个数据打包成一个整体返回
# 可以使用列表和字典,通常情况下使用元组
# 函数名也是一个标识符
# 标识符,由数字,字母和下划线组成,不能以数字开头,严格区分大小写,不能使用关键字
# 遵守命名规范,使用下划线连接,做到顾名思义
def get_sum(a, b):
'''
获取到和
:param a:
:param b:
:return:
'''
# 函数的执行逻辑,要和函数的名字一致
return a + b
def print_sum(a, b):
print(a + b)
# 可以不需要 返回值
x = get_sum(1, 3)
print(x) # 4
def calc(a,b):
shang = a//b
yushu = a%b
return shang,yushu
m,n = calc(15,4)
print(m,n) # 3 3
def say_hello(name, age=55, city='南京'): # 形参city设置了一个默认值
# 缺省参数要放在最后
print('my name is {},my age is {},I\'m come from {}'.format(name, age, city))
say_hello('jack', 22, 'jinan') # my name is jack,my age is 22,I'm come from jinan
say_hello('tom', 15) # my name is tom,my age is 15,I'm come from 南京
# 如果有位置参数和关键字参数,关键字一定要放在位置参数的后边,意思就是带等号的放后边
say_hello('jerry', age=99, city='深圳') # my name is jerry,my age is 99,I'm come from 深圳
say_hello('huoyuanjia') # my name is huoyuanjia,my age is 55,I'm come from 南京
# 若传入的参数 少于 函数要求的参数,且没有设置默认值,会报错,因为函数需要的参数和传进去的参数 不一致
# say_hello() missing 1 required positional argument: 'city'
# 有些函数的参数是,如果传递了参数,就使用传递的参数,如果没有传递参数,就使用默认的值
# print函数里的end就是一个缺省参数
# print('hello world','xiyouji',sep="*********") # hello world*********xiyouji
#