1.引用
def test(num):
print("在函数内部%d对应的内存地址是%d" % (num, id(num)))
# 1> 定义一个字符串变量
result = "hello"
print("函数要返回数据的内存地址是 %d" % id(result))
# 2> 将字符串变量返回,返回的是数据的引用,而不是数据本身
return result
# 1.定义一个数字的变量
a = 10
# 数据的地址本质上就是一个数字
print("a 变量保存数据的内存地址是%d" % id(a))
# 2.调用test函数,本质上传递的是实参保存数据的引用,而不是实参保存的数据
# 注意:如果函数有返回值,但是没有定义变量接收 程序不会报错,但是无法获得返回结果
r = test(a)
print("%s 的内存地址是 %d" % (r, id(r)))
2.局部变量
def demo1():
# 定义一个局部变量
num = 10
print("在demo1函数内部的变量时%d" % num)
def demo2():
num = 99
print("demo2 ==> %d" % num)
pass
demo1()
demo2()
3.全局变量
# 全局变量
num = 10
def demo1():
print("demo1 ==> %d" % num)
def demo2():
print("demo2 ==> %d" % num)
demo1()
demo2()
4.函数不能直接修改全局变量
# 全局变量
num = 10
def demo1():
# 希望修改全局变量的值 在python中,是不允许直接修改全局变量的值
# 如果使用赋值语句,会在函数内部,定义一个局部变量
num = 99
print("demo1 ==> %d" % num)
def demo2():
print("demo2 ==> %d" % num)
demo1()
demo2()
5.修改全局变量
# 全局变量
num = 10
def demo1():
# 希望修改全局变量的值 - 使用global声明一下变量即可
# global 关键字会告诉解释器后面的变量是一个全局变量
# 再使用赋值语句时,就不会创建局部变量
global num
num = 99
print("demo1 ==> %d" % num)
def demo2():
print("demo2 ==> %d" % num)
demo1()
demo2()
6.全局变量的位置
# 注意:在开发时,应该把模块中的所有全局变量都定义在所有函数上方,就可以保证所有的函数,都能够正常的访问到每一个全局变量了
num = 10
# 再定义一个全局变量
title = "黑马程序员"
# 再定义一个全局变量
name = "小明"
def demo():
print("%d" % num)
print("%s" % title)
print("%s" % name) # 报错:name没有定义
demo()
7.全局变量命名
gl_num = 10
# 再定义一个全局变量
gl_title = "黑马程序员"
# 再定义一个全局变量
name = "小明"
def demo():
print("%d" % gl_num)
print("%s" % gl_title)
print("%s" % name) # 报错:name没有定义
demo()
8.多个返回值
def measure():
"""测量温度和湿度"""
print("测量开始。。。")
temp = 39
wetness = 100
print("测量结束。。。")
# 元组-可以包含多个数据,因此可以使用元组让函数一次返回多个值
# 如果函数返回的类型是元组,小括号可以省略
# return (temp, wetness)
return temp, wetness
# 元组
result = measure()
print(result)
# 需要单独的处理温度或者湿度 --- 不方便
print(result[0])
print(result[1])
# 如果函数返回的类型是元组,同时希望单独的处理元组中的元素
# 可以使用多个变量,一次接收函数的返回结果
# 注意:使用多个变量接收结果时,变量的个数应该和元组中元素的个数保持一致
gl_temp, gl_wetness = measure()
print(gl_temp)
print(gl_wetness)
9.交换数字(面试题)
a = 6
b = 100
# 解法1: - 使用其他变量
c = b
b = a
a = c
# 解法2: - 不使用其他的变量
a = a + b
b = a - b
a = a - b
# 解法3: - Python专有
a, b = (b, a)
print(a)
print(b)
10.不可变和可变的参数
def demo(num, num_list):
print("函数内部的代码")
# 在函数内部,针对参数使用赋值语句,不会修改到外部的实参变量
num = 100
num_list = [1, 2, 3]
print(num)
print(num_list)
print("函数执行完成")
gl_num = 99
gl_list = [4, 5, 6]
demo(gl_num, gl_list)
print(gl_num)
print(gl_list)