寒假自学(三)
希望所有温柔又可爱的人最后都能幸福❤
今日总结:
代码量 | 200行 |
---|---|
博客量 | 一篇 |
所学时间 | 4小时左右 |
了解到的知识点 | python语法进阶 |
明日计划:
早上 | python面向对象基础 |
---|---|
下午 | python面向对象基础 |
晚上 | 无 |
具体内容: | |
变量进阶 |
- 变量和数据都是保存在内存中的
- 在
python
中函数的参数传递以及返回值都是靠引用传递的
如果变量已经被定义,当给一个变量赋值的时候,本质上是修改了数据的引用
- 变量不再对之前的数据引用
- 变量改为对新赋值的数据引用
使用id()
函数查看变量地址
def test(num):
print("在函数内部 %d 对应的内存地址是 %d" % (num, id(num)))
result = "hello"
print("函数要返回数据的内存地址是 %d" % id(result))
return result
a = 10
print("a 变量保存数据的内存地址是 %d" % id(a))
r = test(a)
print("%s 的内存地址是 %d" % (r, id(r)))
- 可变和不可变类型
- 不可变类型,内存中的数据不允许被修改
- 数字类型,
int
,bool
,float
,complex
,long(2,x)
- 字符串
str
- 元组
tuple
- 数字类型,
- 可变类型,内存中的数据可以被修改:
- 列表
list
- 字典
dict
- 列表
- 不可变类型,内存中的数据不允许被修改
字典的key
只能使用不可变类型的数据
哈希(hash)
python
中的hash只能接受一个不可变类型的数据作为参数
- 键值对的
key
必须是不可变类型数据 - 键值对的
value
可以是任意类型的数据
局部变量和全局变量
- 局部变量的生命周期
- 生命周期是指变量被创建到被系统回收的过程
- 局部变量在函数执行时才会被创建
- 函数执行结束后局部变量被系统回收
- 局部变量在生命周期内,可以用来存储函数内部临时使用到的数据
- 全局变量
- 在函数内部,可以通过全局变量的引用获取对应的数据
- 但是,不允许直接修改全局变量的引用--使用赋值语句修改全局变量的值
在函数内部修改全局变量的值需要使用global
进行声明
num = 1
def demo():
global num
num = 99
print("demo ==> %d" % num)
def demo2():
num = 99
print("demo ==> %d" % num)
demo2()
print("demo ==> %d" % num)
demo()
在有些公司中,要求在定义全局变量时增加g_
或者gl_
的前缀
多个返回值
def measure():
print("测量开始...")
temp = 39
wetness = 50
print("测量结束...")
# 如果返回的是元组,小括号可以省略
return temp, wetness
result = measure()
print(result)
print(result[0])
print(result[1])
gl_temp, gl_wetness = measure()
print(gl_temp)
print(gl_wetness)
append
方法
def demo(num_list):
print("函数内部的代码")
num_list.append(9)
print(num_list)
print("函数执行完成")
gl_list = [1, 2, 3]
demo(gl_list)
print(gl_list)
函数的缺省参数定义
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("小肖", False)
多值参数
定义支持多值参数的函数
- 有时可能需要一个函数能够处理的参数个数是不确定的,这个时候,就可以使用多值参数
python
中有两种多值参数:- 参数名前增加一个
*
可以接收元组 - 参数名前增加两个
*
可以接收字典
- 参数名前增加一个
- 一般在给多值参数命令时,习惯使用以下两个名字
*args
--存放元组参数,前面有一个*
**kwargs
--存放字典参数,前面有两个*
args
是arguments
的缩写,有变量的含义kw
是keyword
的缩写,kwargs
可以记忆键值对参数
def demo(num, *nums, **person):
print(num)
print(nums)
print(person)
demo(1, 1, 2, 3, 4, 5, name="小明",age = "18")
多值参数
def sum_numbers(*args):
num = 0
for i in args:
num += i
print(args)
return num
result = sum_numbers(1, 2, 3, 4, 5)
print(result)
递归
- 一个函数内部自己调用自己
- 函数内部可以调用其他函数,当然在函数内部也可以调用自己
- 需要指定递归出口,避免死循环
def sum_number(num):
print(num)
if num == 0:
return
sum_number(num - 1)
sum_number(3)
def sum_number(num):
if num == 1:
return 1
temp = sum_number(num - 1)
return temp + num
print(sum_number(100))