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)
MySQL学习笔记