一、Python的基本语法元素
Python程序从默认的第一条语句开始,按顺序依次执行各条语句。代码块可视为复合语句。
Python使用严格的缩进(空格)来表示代码块,连续的多条具有相同缩进量的语句为一个代码块。
注释用于为程序添加说明性的文字,帮助程序员阅读和理解代码。
Python注释分单行注释和多行注释。
单行注释符号:#
多行注释是用3个英文的单引号“'''”或3个双引号“"""”作为注释的开始和结束符号
语句续行符号:“\”
作用:可将一条语句写在多行之中。
注意:在使用括号(包括 “()” “[]”和 “{}”等)时,括号中的内容可分多行书写,括号中的注释、空白和换行符都会被忽略
语句分隔符号:“;
作用:从而将多条语句写在一行”
保留字是程序设计语言中保留的单词,以便版本升级更新之后使用。
关键字是程序设计语言中作为命令或常量等的单词。
Python的保留字和关键字如下。
False await else import pass
None break except in raise
True class finally is return
and continue or lambda try
as def from nonlocal while
assert del global not with
async elif if or yield
【注意】:Python区分标识符的大小写,保留字和关键字必须严格区分大小写。
二、输入函数和输出函数
输入函数:input()
语法:变量 = input('提示字符串')
注意:
1.如果需要输入整数或小数,则应使用int()或float()函数转换数据类型
2.eval()函数可返回字符串的内容,还原输入数据的原本类型,即相当于去掉字符串的引号
变量 =eval(input('提示字符串'))
基本输出:print()
语法:print([obj1,…][,sep=' '][,end='\n'][,file=sys.stdout])
注意:
1.在输出多个数据时,默认使用空格作为输出分隔符。
2.print()函数的默认输出分隔符为空格,可用sep参数指定分隔符号,
语法:print(变量1,变量2,sep='分隔符')
3.print()函数默认以回车换行符号作为输出结尾符号,可以用end参数指定输出结尾符号
语法:print(变量1,变量2,end='结束符')
4.print()函数默认输出到标准输出流(即sys.stdout),可用file参数指定将数据输出到文件
三、变量与对象
变量的命名规则:
1.首字符必须是下划线、英文字母或其他Unicode字符,可包含下划线、英文字母、数字或其他Unicode字符。
2.变量名区分大小写。
3.禁止使用Python保留字或关键字
4.变量必须先定义后使用
赋值语句:=
作用:用于将数据赋值给变量。
序列赋值:一次性为多个变量赋值
如:(x,y)='ab'
注意:序列赋值时,可以在变量名之前使用“*”,不带星号的变量仅匹配一个值,剩余的值作为列表赋值给带星号的变量
多目标赋值:指用连续的多个等号将同一个数据赋值给多个变量
如:a=b=c=10
变量在第一次赋值时被创建,再次出现时可以直接使用。
变量没有数据类型的概念。数据类型属于对象,它决定了对象在内存中的存储方式。
变量引用对象。在表达式中使用变量时,变量立即被其引用的对象替代。所以变量在使用之前必须为其赋值。
变量的共享引用:指多个变量引用了同一个对象
当变量共享引用的对象是列表、字典和类等的实例对象时,如果修改了被引用对象的值,那么所有引用该对象的变量获得的将是改变之后的对象值
可以用is操作符来判断两个变量是否引用了同一个对象
局部变量与全局变量
全局变量
是指定义函数外的变量,不属于任何一个函数,这个变量可以在任何函数中使用.
局部变量
定义在某个函数中,该变量只在该函数中有效,除该函数外,都不能使用这个变量
当全局变量和局部变量同名时,在函数内使用变量,优先使用局部变量
局部变量优先级高于全局变量
如果想修改全局变量,需要声明
global [变量名]
在python中万物皆对象,变量也是一个对象,通过id()函数可以引用对象地址
引用就是数据在内存中存储时的内存编号,可变对象建立以后地址是固定的
函数也是一种对象,当函数不带括号时指代的就是该函数对象的内存地址
四、函数(多用,无论函数功能多单一多简单都使用函数来写)
1.函数的作用:
用来将一段功能代码封装到一起,并起个名.
在使用时,只需要使用代码的名字即可
2.函数的定义和调用(重点)
函数的定义格式:
def 函数名(参数列表...):
'''
函数说明文档
'''
函数功能代码...
函数使用(调用):
函数名(值列表...)
3. 函数调用过程(重点)
a. 函数在定义时,函数体中的代码是不执行的
b. 当产生函数调用时,程序才会跳转到函数体中执行函数的代码
c. 函数体中的代码执行完成后,回到调用处 (重点理解)
4. 函数文档注释(了解)
文档注释: DocString
写在程序文件开头的位置时,是程序文件的DocString,对整个程序进行说明
写在函数开头位置时,是对函数功能的说明, 函数的 DocString
5. 函数的实参和形参
实参:实际参数,是在函数调用时,括号中出现的数据称为实参
形参:形式参数,是在函数被调用时,接收函数调用传递过来的实参数据
实参和形参 在传递时,要一一对应.
形参中可以设置参数默认值
使用默认值 参数时,需要注意:
在默认值 参数的右侧,不能再出现没有默认值 参数
没有默认值的参数要放在前面
6. 函数的参数传递过程
参数在传递时,实参要和形参一一对应,不能多,也不能少,
实参会按顺序一一赋值给形参
不定长位置参数
*args保存具体数值,将所有参数作为元组元素传递
**kwargs保存键值对(变量:值),将所有参数作为字典元素传递
不指定具体的传递参数的个数,
7. 函数返回值(难点,重点)
return 返回一个函数的结果
格式:
return 数据
一个函数,无论在哪遇到return,那么这个函数都会直接结束执行,回到调用处
return 后面可以没有数据
函数也可以没有return ,函数默认返回 None
8. 函数包含多个return语句
一个函数中可以存在多个Return
但是,只能有一个语句有效
在执行顺序上,第一个遇到的Return 有效
9.函数返回多个值
解释器在执行代码时,发现return 后成如果有多个值 ,那么就会将这多个值 ,直接组包成一个元组后将这个元组返回。
10.函数的嵌套调用
当函数需要使用另一个函数的功能时可以嵌套调用,但是嵌套调用一定要有终点函数,不能套娃
递归调用是嵌套调用的特殊形式,递归调用是嵌套调用本函数,递归调用一定要有结束标志
11.当程序达成某个特定条件时需要终止执行
使用exit()函数,括号内可以像input()那样添加文字说明
12.匿名函数
lambda [参数]:[返回值]
lambda 定义时的注意事项
1. lambda 默认返回表达计算结果,不需要return ,如果加了reutrn 反而报错
func = lambda x, y: return x + y
2. 不能使用 循环
func = lambda x,y: for i in range(x, y): print(i)
func = lambda x,y: i = x while i < y: print(i) i +=1
3. 不能使用if的正常格式
func = lambda n: if n % 2 == 0: print('偶数')
4. 但是可以使用 if实现的三目运算符
func = lambda m, n: m if m > n else n
13.高阶函数(一般用于文件操作和组合数据类型的处理)
map 函数
作用:是对参数列表中的元素做一个映射
参数是一个函数和一个列表
对列表的每一项做某一些操作
# 这个函数是为了给map的参数一进行传参
# 因为map函数需要使用这个函数来计算每一个元素的映射值 ,
# 所以该函数有且必须只能有一个参数
高阶函数-reduce
注意:reduce 不能直接使用,需要导入一个模块 functools
reduce 作用是根据传入的参数一对参数二中的数据进行累计操作
如对列表元素进行拼接
filter 过滤函数
过滤出符合条件的数据
默认sort方法是不能对字典进行比较排序的
按id的升序排序
my_list.sort(key=lambda d: d['id'])