1.3.2、list()
list(): 将某个序列转换成列表
t1 = (‘a’,‘b’,‘c’,‘d’,‘e’)
s1 = {100,200,300,400,500}
print(list(t1))
[‘a’, ‘b’, ‘c’, ‘d’, ‘e’]
print(list(s1))
[100, 200, 300, 400, 500]
1.3.3、set()
set():将某个序列转换成集合
list1 = [10,20,30,40,50,20]
t1 = (‘a’,‘b’,‘c’,‘d’,‘e’)
print(set(list1))
{40, 10, 50, 20, 30}
print(set(t1))
{‘e’, ‘a’, ‘c’, ‘d’, ‘b’}
集合可以快速完成列表去重
集合不支持下标
=======================================================================
作用:用一个表达式创建一个有规律的列表或控制一个有规律列表。列表推导式又叫列表生成式
需求:创建一个0-10的列表。
- while循环实现
1.准备一个空列表
list1 = []
2.书写循环,依次追加数字到空列表list1中
i = 0
while i< 10:
list1.append(i)
i += 1
print(list1)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
- for循环实现
list1 = []
for i in range(10):
list1.append(i)
print(list1)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
- 列表推导式实现
for i in range(10):
print(i)
0、1、2、3、4、5、6、7、8、9
list1 = [i for i in range(10)]
print(list1)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
第一个i作为后面式子的返回值
2.1.1、带if的列表推导式
需求:创建0-10的偶数列表
- range()步长实现
list1 = [i for i in range(0,10,2)]
print(list1)
[0, 2, 4, 6, 8]
- if实现
list1 = [i for i in range(10) if i % 2 == 0]
print(list1)
[0, 2, 4, 6, 8]
2.1.2、多个for循环实现列表推导式
需求:创建列表如下
[(1,0),(1,1),(1,2),(2,0),(2,1),(2,2)]
代码如下
list =[]
for i in range(1,3): #1,2
for j in range(3): #0,1,2
#列表里面追加元组
list.append((i,j))
print(list)
[(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
多for的列表推导式等同于for循环嵌套
list1 = [(i,j) for i in range(1,3) for j in range(3)]
print(list1)
[(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
作用:快速合并列表为字典或提取字典中的目标数据
- 创建一个字典:字典key是1-5的数字,value是这个数字的2次方
dict1 = {i:i**2 for i in range(1,5)}
key: value
因为是字典,所以为大括号
{1:2, 2:4, 3:9, 4:16}
- 将两个列表合并为一个字典
list1 = [‘name’,‘age’,‘gender’]
list2 = [‘Tom’,20,‘man’]
dict1 = {list1[i]: list2[i] for i in range(len(list1))}
print(dict1)
{‘name’: ‘Tom’, ‘age’: 20, ‘gender’: ‘man’}
- 提取字典中目标数据
counts = {‘MBP’: 268, ‘HP’: 125, ‘DELL’: 201, ‘Lenovo’: 199, ‘acer’: 99}
#需求:提取上述电脑数量大于等于200的字典数据
counts1 = {key:value for key,value in counts.items() if value >=200}
print(counts1)
{‘MBP’: 268, ‘DELL’: 201}
需求:创建一个集合,数据为下方列表的2次方
list1 = [1,1,2]
代码如下:
list1 = [1,1,2]
set1 = {i ** 2 for i in list1}
print(set1)
{1,4}
注意:集合有数据去重功能
列表推导式
[xx for xx in range()]
字典推导式
{xx1 : xx2 for … in …}
集合推导式
{xx for xx in …}
======================================================================
def 函数名(参数):
代码1…
代码2…
…
函数名(参数)
-
不同需求,参数可有可无
-
在python中,函数必须先定义后使用
-
函数先定义后调用,如果先调用会报错
-
如果没有调用函数,函数里面的代码不会执行
-
当调用函数的时候,解释器回到定义函数的地方去执行下方缩进的代码,当这些代码执行完,回到调用函数的地方继续向下执行,定义函数的时候,函数体内部缩进的代码并没有执行
定义函数时同时定义了接收用户数据的参数a和b,a和b是形参
def add_num2(a,b):
result = a + b
print(result)
调用函数时传入了真实的数据10和20,真实数据为实参
add_num2(10,20) # 30
def buy():
return ‘糖’
使用变量保存函数返回值
goods = buy()
print(goods) # 糖
思考:如果代码多,我们是不是需要在很多代码中找到这个函数定义的位置才能看到注释?如果想更⽅
便的查看函数的作⽤怎么办?
答:函数的说明文档
语法:
def 函数名(参数)
“”“说明文档的位置”“”
代码
…
- 查看函数的说明文档
help(函数名)
- 案例
def sum_num(a, b):
“”“求和函数”“”
return a + b
help(sum_num)
- 打印一条横线
def print_line():
print(‘-’ * 20)
print_line()
- 打印多条横线
def print_line():
print(‘-’ * 20)
def print_lines(num):
i = 0
while i < num:
print_line()
i += 1
print_lines(5)
========================================================================
变量作用域指的是变量⽣效的范围,主要分为两类:局部变量和全局变量
4.1.1、局部变量
所谓局部变量是定义在函数体内部的变量,即只在函数体内部生效
def testA():
a = 100
print(a)
testA() # 100
print(a) # 报错 name ‘a’ is not defined
-
变量a是定义在 testA 函数内部的变量,在函数外部访问则立即报错
-
局部变量的作用:在函数体内部,临时保存数据,即当函数调用完成后,则销毁局部变量。
4.1.2、全局变量
所谓全局变量,指的是在函数体内、外都能⽣效的变量
思考:如果有⼀个数据,在函数A和函数B中都要使⽤,该怎么办?
答:将这个数据存储在⼀个全局变量里面。
定义全局变量a
a = 100
def testA():
print(a) #访问全局变量a,并打印变量a存储的数据
def testB():
print(a) #访问全局变量a,并打印变量a存储的数据
testA() #100
testB() #100
思考: testB 函数需求修改变量a的值为200,如何修改程序?
定义全局变量a
a = 100
def testA():
print(a)
def testB():
这里是定义了一个局部变量a
a = 200
print(a)
testA() #100
testB() #200
print(f’全局变量a={a}') #全局变量a =100
思考:在testB函数内部的 a = 200 中的变量a是修改全局变量a 吗?
答:最后一行得到a的数据是100,仍然是定义全局变量a时候的值,没有返回testB函数内部的200
综上:testB函数内部的 a = 200是定义了一个局部变量
思考:如何在函数体内部修改全局变量?
定义全局变量a
a = 100
def testA():
print(a)
def testB():
global 关键字声明 a 是全局变量
global a
a = 200
print(a)
testA() #100
testB() #200
print(f’全局变量a={a}') #全局变量a =200
一般实际开发中,一个程序往往由多个函数组成,并且多个函数共享某些数据
- 共享全局变量
1. 定义全局变量
glo_num = 0
def test1():
声明 glo_num 是全局变量
global glo_num
修改全局变量
glo_num = 100
def test2():
调⽤test1函数中修改后的全局变量
print(glo_num)
2. 调⽤test1函数,执⾏函数内部代码:声明和修改全局变量
test1()
3. 调⽤test2函数,执⾏函数内部代码:打印
test2() # 100
- 返回值作为参数传递
def test1():
return 50
def test2(num):
print(num)
1. 保存函数test1的返回值
result = test1()
2.将函数返回值所在变量作为参数传递到test2函数
test2(result) # 50
def return_num():
return 1
return 2
result = return_num()
print(result) # 1
如果一个函数有两个return,只会执行第一个return,原因是因为return可以退出当前函数,导致return下⽅的代码不执⾏
def return_num():
return 1, 2
result = return_num()
print(result) # (1, 2)
注意:
-
return a ,b 写法,返回多个数据的时候,默认是元组类型
-
return 后面可以连接列表,元组或字典,以返回多个值
4.4.1、位置参数
位置参数:调⽤函数时根据函数定义的参数位置来传递参数。
def user_info(name,age,gender):
print(f’您的名字是{name},年龄是{age},性别是{gender’)
user_info(‘TOM’,20,‘男’)
注意:传递和定义参数的顺序及个数必须⼀致
4.4.2、关键字参数
函数调用,通过“键=值”形式加以指定。可以让函数更加清晰、容易使⽤,同时也清除了参数的顺序需求。
def user_info(name,age,gender)
print(f’您的名字是{name}, 年龄是{age}, 性别是{gender}')
user_info(‘Rose’, age=20, gender=‘⼥’)
user_info(‘⼩明’, gender=‘男’, age=16)
注意:函数调用时,如果有位置参数时,位置参数必须在关键字参数的前⾯,但关键字参数之间不存在先后顺序。
4.4.3、缺省参数
缺省参数也叫默认参数,⽤于定义函数,为参数提供默认值,调⽤函数时可不传该默认参数的值(注意:所有位置参数必须出现在默认参数前,包括函数定义和调⽤)
def user_info(name, age, gender=‘男’):
print(f’您的名字是{name}, 年龄是{age}, 性别是{gender}')
user_info(‘TOM’, 20)
您的名字是TOM, 年龄是20, 性别是男
user_info(‘Rose’, 18, ‘⼥’)
您的名字是Rose, 年龄是18, 性别是⼥
函数调⽤时,如果为缺省参数传值则修改默认参数值;否则使用这个默认值。
4.4.4、不定长参数
不定长参数也叫可变参数。⽤于不确定调用的时候会传递多少个参数(不传参也可以)的场景
此时,可⽤包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递,会显得非常方便。
- 包裹位置传递
def user_info(*args):
print(args)
(‘TOM’,)
user_info(‘TOM’)
(‘TOM’, 18)
user_info(‘TOM’, 18)
注意:传进的所有参数都会被args变量收集,它会根据传进参数的位置合并为⼀个元组(tuple),args是元组类型,这就是包裹位置传递。
- 包裹关键字传递
def user_info(**kwargs):
print(kwargs)
{‘name’: ‘TOM’, ‘age’: 18, ‘id’: 110}
user_info(name=‘TOM’, age=18, id=110)
综上:⽆论是包裹位置传递还是包裹关键字传递,都是⼀个组包的过程
4.5.1、拆包元组
def return_num():
return 100, 200
num1, num2 = return_num()
print(num1) # 100
print(num2) # 200
4.5.2、拆包字典
dict1 = {‘name’: ‘TOM’, ‘age’: 18}
a, b = dict1
对字典进⾏拆包,取出来的是字典的key
print(a) # name
print(b) # age
print(dict1[a]) # TOM
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)
综上:⽆论是包裹位置传递还是包裹关键字传递,都是⼀个组包的过程
4.5.1、拆包元组
def return_num():
return 100, 200
num1, num2 = return_num()
print(num1) # 100
print(num2) # 200
4.5.2、拆包字典
dict1 = {‘name’: ‘TOM’, ‘age’: 18}
a, b = dict1
对字典进⾏拆包,取出来的是字典的key
print(a) # name
print(b) # age
print(dict1[a]) # TOM
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-j9akcWH8-1713673006188)]
[外链图片转存中…(img-zA0seipl-1713673006189)]
[外链图片转存中…(img-xIaL3zcJ-1713673006190)]
[外链图片转存中…(img-CAn2W7RE-1713673006190)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)