hm_01_引用.py
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)))
hm_02_局部变量.py
def demo1(): # 定义一个局部变量 # 1> 出生:执行了下方的代码之后,才会被创建 # 2> 死亡:函数执行完成之后 num = 10 print("在demo1函数内部的变量是 %d" % num) def demo2(): num = 99 print("demo2 ==> %d" % num) pass # 在函数内部定义的变量,不能在其他位置使用 # print("%d" % num) demo1() demo2()
hm_03_全局变量.py
# 全局变量 num = 10 def demo1(): print("demo1 ==> %d" % num) def demo2(): print("demo2 ==> %d" % num) demo1() demo2()
hm_04_函数不能直接修改全局变量.py
# 全局变量 num = 10 def demo1(): # 希望修改全局变量的值 # 在 python 中,是不允许直接修改全局变量的值 # 如果使用赋值语句,会在函数内部,定义一个局部变量 num = 99 print("demo1 ==> %d" % num) def demo2(): print("demo2 ==> %d" % num) demo1() demo2()
hm_05_修改全局变量.py
# 全局变量 num = 10 def demo1(): # 希望修改全局变量的值 - 使用 global 声明一下变量即可 # global 关键字会告诉解释器后面的变量是一个全局变量 # 再使用赋值语句时,就不会创建局部变量 global num num = 99 print("demo1 ==> %d" % num) def demo2(): print("demo2 ==> %d" % num) demo1() demo2()
hm_06_全局变量的位置.py
# 注意:在开发时,应该把模块中的所有全局变量 # 定义在所有函数上方,就可以保证所有的函数 # 都能够正常的访问到每一个全局变量了 num = 10 # 再定义一个全局变量 title = "黑马程序员" # 再定义一个全局变量 name = "小明" def demo(): print("%d" % num) print("%s" % title) print("%s" % name) # # 再定义一个全局变量 # title = "黑马程序员" demo() # # 再定义一个全局变量 # name = "小明"
hm_07_全局变量命名.py
gl_num = 10 # 再定义一个全局变量 gl_title = "黑马程序员" # 再定义一个全局变量 gl_name = "小明" def demo(): # 如果局部变量的名字和全局变量的名字相同 # pycharm会在局部变量下方显示一个灰色的虚线 num = 99 print("%d" % num) print("%s" % gl_title) print("%s" % gl_name) # # 再定义一个全局变量 # title = "黑马程序员" demo()
hm_08_多个返回值.py
def measure(): """测量温度和湿度""" print("测量开始...") temp = 39 wetness = 50 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)
hm_09_交换数字(面试题).py
a = 6 b = 100 # 解法1:-使用其他变量 # c = a # a = b # b = c # 解法2:-不使用其他的变量 # a = a + b # b = a - b # a = a - b # 解法3:-Python 专有 # a, b = (b, a) # 提示:等号右边是一个元组,只是把小括号省略了 a, b = b, a print(a) print(b)
hm_10_不可变和可变的参数.py
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)
hm_11_函数内部通过方法修改可变参数.py
def demo(num_list): print("函数内部的代码") # 使用方法修改列表的内容 num_list.append(9) print(num_list) print("函数执行完成") gl_list = [1, 2, 3] demo(gl_list) print(gl_list)
hm_12_加等于(面试题).py
def demo(num, num_list): print("函数开始") # num = num + num num += num # 列表变量使用 + =不会做相加再赋值的操作 ! # num_list = num_list + num_list # 本质上是在调用列表的 extend 方法 num_list += num_list # num_list.extend(num_list) print(num) print(num_list) print("函数完成") gl_num = 9 gl_list = [1, 2, 3] demo(gl_num, gl_list) print(gl_num) print(gl_list)
hm_13_函数的缺省参数.py
gl_list = [6, 3, 9] # 默认按照升序排序 - 可能会多! # gl_list.sort() # 如果需要降序排序,需要执行reverse参数 gl_list.sort(reverse=True) print(gl_list)
hm_14_函数的缺省参数定义.py
def print_info(name, gender=True): """ :param name: 班上同学的姓名 :param gender: True 男生 False 女生 """ gender_text = "男生" if not gender: gender_text = "女生" print("%s 是 %s" % (name, gender_text)) # 假设班上的同学,男生居多! # 提示:在指定缺省参数的默认值时,应该使用最常见的值作为默认值! print_info("小明") print_info("老王") print_info("小美", False)
hm_15_缺省参数注意点.py
def print_info(name, title="", gender=True): """ :param title: 职位 :param name: 班上同学的姓名 :param gender: True 男生 False 女生 """ gender_text = "男生" if not gender: gender_text = "女生" print("[%s]%s 是 %s" % (title, name, gender_text)) # 假设班上的同学,男生居多! # 提示:在指定缺省参数的默认值时,应该使用最常见的值作为默认值! print_info("小明") print_info("老王") print_info("小美", gender=False)
hm_16_多值参数.py
def demo(num, *nums, **person): print(num) print(nums) print(person) # demo(1) demo(1, 2, 3, 4, 5, name="小明", age=18)
hm_17_多值参数求和.py
def sum_numbers(*args): # def sum_numbers(args): num = 0 print(args) # 循环遍历 for n in args: num += n return num result = sum_numbers(1, 2, 3, 4, 5) # result = sum_numbers((1, 2, 3, 4, 5)) print(result)
hm_18_元组和字典的拆包.py
def demo(*args, **kwargs): print(args) print(kwargs) # 元组变量/字典变量 gl_nums = (1, 2, 3) gl_dict = {"name": "小明", "age": 18} # demo(gl_nums, gl_dict) # 拆包语法,简化元组变量/字典变量的传递 demo(*gl_nums, **gl_dict) demo(1, 2, 3, name="小明", age=18)
hm_19_递归函数的特点.py
def sum_number(num): print(num) # 递归的出口,当参数满足某个条件时,不再执行函数 if num == 1: return # 自己调用自己 sum_number(num - 1) sum_number(3)
hm_20_递归求和.py
# 定义一个函数 sum_numbers # 能够接收一个 num 的整数参数 # 计算 1 + 2 + ... num 的结果 def sum_numbers(num): # 1. 出口 if num == 1: return 1 # 2. 数字的累加 num + (1...num -1) # 假设 sum_numbers 能够正确的处理 1...num - 1 temp = sum_numbers(num - 1) # 两个数字的相加 return num + temp result = sum_numbers(100) print(result)