元组#
元组 Tuple 和列表类似,但是元组的元素 不能修改
通常使用 元组 存储不同类型的数据
元组表示多个元素组成的序列
下标从0开始
用户存储一串信息, 数据之间使用 逗号 分隔
- 定义元组
info_tuple = ("zhangsan",18,1.75) print(type(info_tuple)) # <class 'tuple'>
- 取值
print(info_tuple[0]) print(info_tuple[1]) print(info_tuple[2]) # print(info_tuple[3])#tuple index out of range
- 取索引
print(info_tuple.index("zhangsan")) # 0
- 统计计数
print(info_tuple.count("zhangsan")) # 1
- 定义空元组,一般是不定义空元组的,但是没意义,因为不能再修改
empty_tuple = () print(type(empty_tuple))#<class 'tuple'>
- 定义一个元素的元组
single_touble1 = (5) # 解释器会忽略两个小括号 print(type(single_touble1))# <class 'int'> 被解释器解释成了int类型 single_touble2 = (5,) # 多加上一个逗号 print(type(single_touble2))#<class 'tuple'>
- 元组的应用场景
- 作为入参: 可以使得函数一次性接受多个参数
- 让列表不可变,保护数据的安全
- 作为返回值: 可以使函数一次性返回多个值
- 格式化字符串, 在print函数中,格式化字符串时, 格式化字符串后面的() 本质上就是一个元组
例:
print("年龄: %d 姓名:%s"%(123,"小明")) info_tuple = ("zhangsan",18,1.75) print(type(info_tuple)) # <class 'tuple'> info_str="姓名:%s 年龄: %d 身高%.2f "% info_tuple print(info_str)
- 列表转元组
my_list = [1,3,4,5] my_list = tuple(my_list) print(type(my_list)) # my_list
- 函数返回元组
def mea(): a=1 b=2 return (a,b) # 接受 result = mea() # 使用 print(result[0]) print(result[1]) # 也可以这样接收, 注意, 变量的格式和元组的数保持一致 gl_a, gl_b = mea()
字典#
字典是 无序对象 的集合 类似java中的 map,或者说是java中的一个对象
说它是无序,使用print输出时,每次的顺序不唯一
因为我们只关心通过key 取出 保存的数据,而不关心存储的顺序
字典使用{}定义
字典使用键值对存储数据, 键值对使用 逗号分隔
key 是索引,并且是 不可变类型的变量才能当key (列表,字典是可变类型,不能当成key)
value 是数据
键和值之间使用 : 冒号分隔
键是唯一的
值任意数据类型
* 定义字典
person={"name":"张三","age":23}
- 取值
# 取值 print(person["name"])# 入参位置的name是key # print(xiaoming["name123"])# KeyError: 'name123' key不存在,程序会报错
- 添加修改
# 添加/修改, 如果key存在了, 就是修改, key不存在就是添加 person["height"]=1.78 print(person)
- 删除
person.pop("age") print(person)
- 统计键值对的数量
print(len(person))
- 合并字典
new_dir={"class":"大一"} person.update(new_dir) # 如果被合并的字典中包含原有的键值对, 会覆盖旧值 print(person)
- 清空字典xiaoming
xiaoming.clear() print(xiaoming)
- 遍历
for k in person: print(" value = %s "%person[k])
- 字典和列表搭配使用
将多个字典存入一个列表中,然后遍历列表对实现对字典批量处理的动作 list = [ {}, {}, {} ]
if分支判断语句#
if 要顶格写 if 条件1: XXX elif ()or()or(): XXX else: XXX 严格控制缩进, tab 和 空格不能混用,容易乱
逻辑运算符#
与 and 或 or 非 not 条件1 and 条件2 条件1 or 条件2 对条件取反 not 条件1 not 条件2
循环#
- for循环
for 变量 in 集合: XXX else: XXX
- while循环
i=0 while i<5: print("i= %d"%i) #i=i+1 i+=1
函数#
格式如下
def 函数名(): XXX XXX def 函数名(): XXX XXX return XXX
内置函数#
- 随机数
import random n = random.randint(1,5)# 1 <= n <= 5 m = random.randint(5,5)# n = 5 # s = random.randint(10,5)# 第一个数大于第二个数则保存 print("age== %d "%n)
缺省参数#
- 缺省参数, 简化人们的编码
gl_list=[5,126,7] gl_list.sort() print(gl_list) # 默认正序 gl_list.sort(reverse=True) # 缺省参数位置,可以设置逆序 print(gl_list)
- 指定缺省参数的默认值
def print_info(name,gender=True): default_gender="男生" if not gender: default_gender = "女生" print("%s 是 %s"%(name,default_gender)) print_info("小明") print_info("小明",False)
注意事项:缺省参数必须保证它出现在 !!! 参数列表的末尾 !!!
- 如何调用含有多个参数, 如果有多个参数的话, 中间位置的参数最好也设置上默认值
def print_info(name,age="",gender=True): default_gender="男生" if not gender: default_gender = "女生" print("%s 是 %s"%(name,default_gender)) print_info("小明") print_info("小明",gender=False)
- 多值参数
在参数名前添加一个 * 可以接收元组
在参数名前添加两个 * 可以接收字典
习惯用下面的方式命名:
- *args :存放元组
- **kw :存放字典数据
def demo(num,*nums,**person): print(num) print(nums) print(person) demo(1) ''' 1 () {} ''' demo(1,23,4,5,6) ''' 1 (23, 4, 5, 6) {} ''' demo(1,23,4,5,6,name="张三",age=18) ''' 1 (23, 4, 5, 6) {'name': '张三', 'age': 18} ''' # 对比去除* 的写法, 其实用户在使用时变麻烦了,多增加了一个小括号 def print_info1(name): print(name) print_info1((1,2,3,4))#(1, 2, 3, 4)
元组和字段的拆包#
def demo(*args,**kwargs): print(args) print(kwargs) gl_nums=(1,2,3) gl_dir={"name":"李四","age":12} demo(gl_nums,gl_dir) ''' 下面的运行结果其实是差强人意的, 需要进行拆包 ((1, 2, 3), {'name': '李四', 'age': 12}) {} ''' # 不拆包,直接调用 demo(1,2,3,name="李四",age=123) ''' (1, 2, 3) {'name': '李四', 'age': 123} ''' # 拆包 demo(*gl_nums,**gl_dir) ''' (1, 2, 3) {'name': '李四', 'age': 12} '''