Python基础系列
Python 基础学习笔记 01
Python 基础学习笔记 02
Python 基础学习笔记 03
Python 基础学习笔记 04
Python 基础学习笔记 05
语法格式:
if 要判断的条件:
条件成立时,要做的事情
else
条件不成立时,要做的事情
格式:
条件1 or 条件2
真假表
格式:
not 条件
真假表
在开发中,使用if可以判断条件,使用else可以处理条件不成立的情况,但是,如果希望再增加一些条件,条件不同,需要执行的代码也不同时,就可以使用elif
语法格式:
if 条件1:
条件1满足执行的代码
elif 条件2:
条件2满足时,执行的代码
elif 条件3:
条件3满足时,执行的代码
else:
以上条件都不满足时,执行的代码
注意:
在开发时,使用if进行条件判断,如果希望再条件成立执行语句中再增加条件判断,就可以使用if的嵌套。if嵌套使用的场景就是:在之前条件满足的前提下,再增加额外的判断,注意缩进
语法格式:
if 条件1:
# 条件1满足执行的代码
if 条件1基础上的条件2:
条件2满足时,执行的代码
# 条件2不满足的处理
else:
条件2不满足时,执行的代码
# 条件1不满足的处理
else:
条件1不满足时,执行的代码
语法:
初始条件设置--通常是重复执行的计数器
while条件(判断 计数器 是否达到 目标次数):
条件满足时,做的事情1
条件满足时,做的事情2
条件满足时,做的事情3
..(省略).
处理条件(计数器+1)
break和continue
循环嵌套
语法:
while 条件 1:
条件满足时,做的事情1
条件满足时,做的事情2
条件满足时,做的事情3
while 条件 2:
条件满足时,做的事情1
条件满足时,做的事情2
条件满足时,做的事情3
..(省略).
处理条件2
处理条件1
函数:把具有独立功能的代码块组织成一个小模块,在需要的时候调用
步骤:
作用:在程序开发时,使用函数可以提高编写的效率以及代码的重用
语法:
def 函数名():
函数封装的代码
函数名称应该能够表达函数封装代码的功能,方便后续的调用
函数名称的命名应该符合表示符的命名规则
CTRL+Q
可以查看函数的说明信息__pycache__
的目录hm_10_分隔线模块.cpython-39.pyc
文件,cpython-39
表示python解释器的版本pyc
文件是由python解释器将模块的源码转换为字节码
[]
for in
+
和重复*
[]
定义,数据之间使用,
隔开。列表的索引从0开始,索引就是数据在列表中的位置编号,索引又可以称为下标。从列表中取值时,如果超出索引范围,程序会报错。具体代码:
namelist = ["zhangsan","wangwu","lisi","wangwu"]
# 1.取值或取索引
print(namelist[2])
# 求取列表内容所在的位置 (ValueError: 'wangwu321' is not in list)
print(namelist.index("wangwu"))
# 2.修改 (IndexError: list assignment index out of range)
print(namelist)
namelist[1] = "李四"
print(namelist)
# 3.增加
# append可以向列表的末尾追加数据
namelist.append("王小二")
print(namelist)
#insert可以向列表的指定位置插入数据
namelist.insert(1,"小美眉")
print(namelist)
# extend可以把其他列表的完整内容,追加到当前列表的末尾
temp_list = ["孙悟空","猪二哥","沙师弟"]
namelist.extend(temp_list)
print(namelist)
# 4.统计
print(len(namelist))
# 5.排序
print(namelist)
namelist.sort()
print(namelist)
namelist.sort(reverse=True)
print(namelist)
namelist.reverse()
print(namelist)
# 6.删除
# remove可以从列表中删除指定的数据
namelist.remove("wangwu")
print(namelist)
# pop可以删除列表最后的数据
namelist.pop()
print(namelist)
namelist.pop(3)
print(namelist)
# clear可以清空整个列表
namelist.clear()
print(namelist)
del关键字
del name_list[1]
在日常开发中,要从列表删除数据,建议使用列表提供的方法
遍历就是从头到尾依次从列表中获取数据,在循环体内部针对每一个元素,执行相同的操作
在python中为了提高列表的遍历效率,专门提供了迭代iteration遍历
使用for就能够实现迭代遍历
# for 循环内部使用的变量 in 列表
for name in name_list:
循环内部针对列表元素进行操作
print(name)
具体代码:
name_list = ["张三","李四","王五","王小二"]
for my_name in name_list:
print("我的名字叫 %S" % my_name)
,
分隔()
定义info_tuple = ()
元组中只包含一个元素时,需要在元素后面添加逗号
info_tuple = (50,)
具体代码:
# 1.从列表中取值
info_tuple = ("zhangsan",18,1.75,"zhangsan")
print(info_tuple[2])
# 2.取索引(第一次),已知数据的内容,希望知道该数据在元组中的索引
print(info_tuple.index("zhangsan"))
# 3.统计元组中包含元素的个数
print(len(info_tuple))
# 4.统计计数
print(info_tuple.count("zhangsan"))
取值就是从元组中获取存储在指定位置的数据
遍历就是从头到尾依次从元组中获取数据
注意:
具体代码:
info_tuple = ("zhangsan",18,1.75)
for my_info in info_tuple:
print(my_info)
函数的参数和返回值,一个函数可以接收任意多个参数,或者一次返回多个数据
格式字符串,格式化字符串后面的()
本质上就是一个元组
info_tuple = ("zhangsan",18,1.75)
print("%s 的年龄是 %d ,身高是 %.2f" % info_tuple)
让列表不可以被修改,以保护数据安全
使用list
函数可以把元组转换成列表
# 定义元组
num_tuple = (1,2,3,4)
# 使用list函数可以把元组转换成列表
num_list = list(num_tuple)
print(type(num_list))
使用tuple
函数可以把列表转换成元组
# 定义列表
num_list = [1,2,3,4]
# 使用tuple函数可以把列表转换成元组
num_tuple = tuple(num_list)
print(type(num_tuple))
{}
定义,
分隔
key
是索引,必须是唯一的value
是数据,可以取任何数据类型,但键只能使用字符串、数字和元组:
分隔具体代码
# 1.字典的定义
xiaoming_dict = {"name":"xiaoming",
"age":18,
"gender":True,
"height":1.75,
"weight":75}
print(xiaoming)
# 2.取值 (KeyError: 'name123')
print(xiaoming_dict["name"])
print(xiaoming_dict.get("age"))
# 3.增加或修改数据
# key不存在,增加数据
xiaoming_dict["age"] = 17
# key存在,修改数据
xiaoming_dict["name"] = "小小明"
# key存在,不修改数据
xiaoming_dict.setdefault("name","大明")
# key不存在,增加数据
xiaoming_dict.setdefault("hobby","篮球")
# 4.删除数据
# 删除指定键值对
xiaoming_dict.pop("name")
#随机删除一个键值对(??最后一个,不随机??)
xiaoming_dict.popitem()
# 清空字典
xiaoming_dict.clear()
# 5.统计键值对数量
print(len(xiaoming_dict))
# 6.合并字典
# 如果被合并的字典中包含已经存在的键值对,会覆盖原有的键值对
temp_dict = {"height":1.75,"age":20}
xiaoming_dict.update(temp_dict)
# 7.获取所有key列表
keys = xiaoming_dict.keys()
print(keys)
# 8.获取所有value列表
xiaoming_dict.values()
遍历:依次获取所有键值对
# for 循环内部使用的 key的变量 in 字典
for k in xiaoming_dict:
print("%s: %s" % (k,xiaoming_dict[k]))
注意:在实际开发中,由于字典中的每一个键值对保存数据的类型是不同的,所以针对字典的循环遍历需求不是很多
使用多个键值对,存储描述一个物体的相关信息–描述更复杂的数据信息
将多个字典放在一个列表中,再进行遍历,在循环体内部针对每一个字典进行相同的处理
card_list = [
{"name":"张三",
"qq":"12345",
"phone":"110"
},
{"name": "李四",
"qq": "54321",
"phone": "10086"
}
]
for card_info in card_list:
print(card_info)
字符串就是一串字符,是编程语言中表示文本的数据类型
在python中可以使用一对双引号"
或者一对单引号'
定义一个字符串
如果字符串内部需要使用"
,可以使用'
定义字符串
如果字符串内部需要使用'
,可以使用"
定义字符串
可以使用索引获取一个字符串中指定位置的字符,索引计数从0开始
也可以使用for循环遍历字符串中每一个字符
定义与遍历
str1 = "hello python"
str2 = "我的外号是'大西瓜'"
for char in str2:
print(char)
# 1.判断空白字符
space_str = " \r\t\n"
print(space_str.isspace())
# 2.判断字符串中是否只包含数字
num_str = "12\u00b2"
# 只能判断单纯数字
print(num_str.isdecimal())
# 可以判断数字和unicode编码
print(num_str.isdigit())
# 可以判断字母、unicode、中文数字
print(num_str.isnumeric())
hello_str = "hello world"
# 1.判断是否以指定字符串开始
print(hello_str.startswith("hello"))
# 2.判断是否以指定的字符串结束
print(hello_str.endswith("world"))
# 3.查找指定字符串
# index同样可以查找指定的字符串在大字符串中的索引
print(hello_str.find("llo"))
# index如果指定的字符串不存在,会报错
# find如果指定的字符串不存在,会返回-1
print(hello_str.find("abc"))
# 4.替换字符串
# replace方法执行完成以后,会返回一个新的字符串
# 注意:不会修改原有字符串的内容
print(hello_str.replace("world","python"))
print(hello_str)
hello_str = "hello world"
# 把字符串中的第一个字符大写
print(hello_str.capitalize())
# 把字符串中的每个单词首字母大写
print(hello_str.title())
# 转换hello_str的小写字母为大写字母
print(hello_str.upper())
# 要求:顺序并居中对齐输出以下内容
poem = ["登鹳雀楼\n\t",
"王之涣",
"白日依山尽",
"\t黄河入海流",
"欲穷千里目",
"更上一层楼"]
for poem_str in poem:
# 先使用strip方法去除字符串中的空白字符
# 再使用center方法居中显示文本
print("|%s|" % poem_str.strip().center(20," "))
# 以anhui为基础进行分割,分割成三个元组
# 把数据转换成元组,使用循环输出结果
helllo_str = "helloanhuiaust"
hello_tuple = helllo_str.partition("anhui")
for mytuple in hello_tuple:
print(mytuple,len(mytuple))
# 1.将字符串中的空白字符全部去掉
# 2.再使用" "作为分隔符,拼接成一个整齐的字符串
poem_str = "登鹳雀楼\n\t王之涣\n白日依山尽\t黄河入海流\t\n欲穷千里目\t\n更上一层楼"
print(poem_str)
# 1.拆分字符串 split函数的返回值是字符串列表
poem_list = poem_str.split()
print(poem_list)
# 2.合并字符串
result = " ".join(poem_list)
print(result)
切片方法适用于字符串、列表、元组
操作:
字符串[开始索引:结束索引:步长]
注意:
[开始索引,结束索引)
,从起始位置开始,到结束位置的前一位结束索引的顺序和倒序
具体代码:
num_str = "0123456789"
# 1.截取2-5位置的字符串(左闭右开)
print(num_str[2:6])
# 2.截取2-末尾位置的字符串(末尾可以省略)
print(num_str[2:])
# 3.截取从开始-5的字符串(开始可以省略)
print(num_str[:6])
# 4.截取完整的字符串(开始和结束都省略)
print(num_str[:])
# 5.从开始位置开始,每隔一个字符截取一个字符
print(num_str[::2])
# 6.从索引1开始,每隔一个字符取一个字符
print(num_str[1::2])
# 7.倒序切片 -1表示倒数第一个字符
print(num_str[-1])
# 8.截取从2-末尾-1的字符串
print(num_str[2:-1])
# 9.截取字符串末尾的两个字符
print(num_str[-2:])
# 10.字符串的逆序
print(num_str[::-1])
切片
具体代码:
# 合并 +
list1 = [1,2,3]
list2 = [4,5,6]
print(list1+list2)
# 重复 *
str1 = ["Hi"]
print(str1 * 4)
# 元素是否存在与不存在
tuple1 = (1,2,3,4)
print(2 in tuple1)
print(5 not in tuple1)
# 元素比较
print((4,5,6) < (2,))
完整的for循环语法
语法:
for 变量 in 集合:
循环体代码
else:
没有通过 break 退出循环,循环结束后,会执行的代码
具体实现代码:
# 在学员列表中搜索指定的姓名
find_name = "张三"
students = [
{"name":"阿土",
"age":20,
"gender":True,
"height":1.7,
"weight":75.0},
{"name":"小美",
"age":19,
"gender":False,
"height":1.6,
"weight":45.0},
]
for stu_dict in students:
print(stu_dict)
if stu_dict["name"] == find_name:
print("找到了 %s" % find_name)
# 如果找到直接退出循环,后续不在遍历
break
else:
# 如果希望在搜索列表时,所有的字典检查之后,都没有需要搜索的目标
print("没有找到 %s " % find_name)
print("循环结束")
int
,bool
,float
,complex
,long(2.x)
str
tuple
list
dict
局部变量是在函数内部定义的变量,只能在函数的内部使用
全局变量是在函数外部定义的变量,所有函数内部都可以使用这个变量
局部变量
局部变量是在函数内部定义的变量,只能在函数内部使用
函数执行结束后,函数内部的局部变量,会被系统回收
不同的函数,可以定义相同的名字的局部变量,而且彼此之间不会产生影响
作用:
生命周期:
代码实现:
def demo1():
# 局部变量
num = 10
print("在demo1内部的变量是%d" % num)
demo1()
全局变量
全局变量是在函数外部定义的变量,所有函数内部都可以使用这个变量
函数执行时,需要处理变量时:
代码实现:
# 全局变量
num = 10
def demo1():
print("demo1 ==> %d" % num)
def demo2():
print("demo2 ==> %d" % num)
demo1()
demo2()
函数不能直接修改全局变量的引用
num = 10
def demo1():
# 希望修改全局变量的值
# 在python中,是不允许直接修改全局变量的值,如果使用赋值语句,会在函数内部定义 一个局部变量
num = 99
print("demo1 ==> %d" % num)
def demo2():
print("demo2 ==> %d" % num)
demo1()
demo2()
print(num)
在函数内部修改全局变量的值
在函数中需要修改全局变量的值,需要使用global
进行声明
num = 10
def demo1():
# global声明全局变量的值
global num
num = 99
print("demo1 ==> %d" % num)
def demo2():
print("demo2 ==> %d" % num)
demo1()
demo2()
print(num)
全局变量定义的位置
全局变量命名的建议
g_
或者gl_
的前缀函数执行结束后,告诉调用者一个结果,以便调用者针对具体的结果做后续的处理
返回值是函数完成工作后,最后给调用者的一个结果
在函数中使用return关键字可以返回结果
调用哈数一方,可以使用变量来接收函数的返回结果
返回多个结果:
def mesure():
temp = 39
wetness = 50
# 如果函数返回的类型是元组,小括号可以省略
return temp,wetness
# result为元组类型
result = mesure()
print(result)
# 可以将一个元组使用赋值语句同时赋值给多个变量
# 变量的数量需要和元组中的元素数量保持一致
result = temp,wetness = measure()
交换两个数据
a=6
b=100
a,b = b,a
print(a,b)
不可变和可变的参数
无论传递的参数是可变还是不可变,只要针对参数使用赋值语句,会在函数内部修改局部变量的引用,不会影响到外部变量的引用
代码实例:(使用赋值语句)
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,gl_list)
代码实例:(使用方法)
def demo(num_list):
num_list.append(9)
print(num_list)
gl_list = [1,2,3]
demo(gl_list)
print(gl_list)
代码实例:(列表变量调用+-
,本质上是执行extend
方法)
def demo(num,num_list):
print("函数开始")
num += num
# 对于列表变量,在使用+=时,本质上是在执行列表变量的extend方法,不会修改变量的 引用
num_list += 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)
缺省参数
定义函数时,可以给某个参数指定一个默认值,具有默认值的参数就叫做缺省参数
调用函数时,如果没有传入缺省参数的值,则在函数内部使用定义函数时指定的参数默认值
函数的缺省参数,将常见的值设置为参数的缺省值,从而简化函数的调用
代码实例:
gl_num_list = [6,3,9]
gl_num_list.sort()
print(gl_num_list)
gl_num_list.sort(reverse=True)
print(gl_num_list)
代码实例:(指定函数的缺省参数)
def print_info(name,gender=True):
gender_text = "男生"
if not gender:
gender_text = "女生"
print("%s 是 %s" % (name,gender_text))
注意:
缺省参数的定义位置
调用带有多个缺省参数的函数
在调用函数时,如果有多个缺省参数,需要指定参数名,这样解释器才知道参数的对应关系
代码实例:
def print_info(name,title="同学",gender=True):
gender_text = "男生"
if not gender:
gender_text = "女生"
print("[%s] %s 是 %s" % (title,name,gender_text))
print_info("小明")
print_info("老王",title="班长")
print_info("小美",gender=False)
多值参数
一个函数接收的参数不确定时,使用多值参数
两种多值参数
*
可以接收元组**
可以接收字典代码实例:(多值参数)
def demo(num, *nums, **person):
print(num)
print(nums)
print(person)
demo("name",2,3,4,5,name="小明",age=18,gender=True)
代码实例:(多值参数)
def sum_numbers(*args):
num = 0
print(args)
for n in args:
num += n
return num
result = sum_numbers(1,2,3,8,89)
print(result)
代码实例:(元组和字典的拆包,元组加一个*
,字典加两个*
)
def demo(*args, **kwargs):
print(args)
print(kwargs)
gl_nums = (1,2,3)
gl_dict = {"name":"小明","age":18}
# 在元组前面加一个*,在字典前面加上两个*
demo(*gl_nums,**gl_dict)
特点:一个函数内部调用自己
代码特点:
代码实例:
def sum_number(num):
print(num)
if num == 1:
return
sum_number(num-1)
sum_number(3)
代码实例:(求和)
def sum_numbers(num):
# 1.出口
if num == 1:
return 1
temp = sum_numbers(num-1)
return num + temp
result = sum_numbers(100)
print(result)