一、 第一个python程序
1. 函数声明
def 函数名(参数一,参数二,….):
函数体
(1) 函数不一定返回数据,可以不返回数据,但事实上python总是返回值,且不指定返回值的类型,若函数执行return,则返回对应值,若没有调用return,则默认返回空值none;
(2) 变量从来都不指定变量类型,python会在内部算出一个变量的类型并进行跟踪;
(3) 参数都有一个默认的值,若函数调用没有传入该参数,则使用默认值,而且,当你不按顺序赋值参数时,可以使用参数名乱序赋值,但一旦指定参数名赋值后,每个变量都得使用参数名赋值,否则报错,因为找不到;
例如:
del add(a,b):
return a + b
if ‘__name__ == ‘__main__’:
add() #不传入参数,则a,b使用默认值
add(b = 0,a = 2) #使用变量名赋值
add(b = 4,0) #报错,命名参数后面紧跟了一个非命名的参数
2. 文档字符串
在函数声明的下一行紧跟三重引号来对此函数功能,参数等进行说明。
当在其他地方调用到函数时,文档字符串会以提示的形式显示,方便使用者理解函数。
例:
def 函数名:
'''函数功能介绍'''
函数体
3. 代码缩进
Python没有花括号{}表示一个代码的开始或结束,而是以冒号:表示界定符,相同空格缩进表示相同的代码块。
二、 内置数据类型
Python有很多内置类型,比较重要的有:
Booleans布尔类型:取值为True或False
Numbers数值类型:Integer整形,float浮点型,fractions分数
String字符型:是unicode字符序列
Bytes字节和Byte Arrays字节数组:例如jpeg图像文件
Lists列表:值有序的序列
Tuples元组:有序而不可变的值序列
Set集合:装满无序值的包裹
Dictionaries字典:键值对的无序包裹
1.数据类型判断
Python无数据类型声明用于区分数据的具体类型,完全由系统自行判断,用函数type(),isinstance()判断数据类型
例:
>>> type(1)
<class 'int'>
>>> isinstance(1,int)
True
>>> type(2.0)
<class 'float'>
2.列表
列表是一个有序的值序列,可以向列表中加入任何数据类型,并且可以任意的拓展或收缩。
2.1列表创建
list = [1,’a’,’b’] 通过索引访问列表元素,list[-1]表示列表最后一个元素。
2.3列表新增
List = [1,2,3,4]
四种方法向列表中添加元素:
1. +号添加
List = list + [‘a’,’b’,5] 将元组添加到list中,并且每个元素作为list的元素;
结果:list = [1,2,3,4,’a’,’b’,5]
2. append方法
List.append(任意数据类型) 在列表末尾添加元素
3. extend方法
list.extend(元组) 将元组(参数只能是元组)添加到list中,并且元组的每个元素作为list的元素
例:
List.extend([6,’f’])
List = [1,2,3,4,’a’,’b’,5,6,’f’]
4. insert(索引,值)
list.insert(0,‘t’)
结果: List = [‘t’,1,2,3,4,’a’,’b’,5,6,’f’]
注意:list.append([7,8,9]) 是将元组作为一个元素插入,list = [1,2,3,5,[7,8,9]]
2.2列表切片
定义列表后,可以从其中获得任何部分作为新的列表,称为对列表进行切片。
例:
>>> list = [1,'a','b',2.0]
>>> list[1:3]
['a', 'b']
>>> list[1:-1] #-1表示最后一个元素
['a', 'b']
>>> list[2:] #若不写右值,则表示遍历到列表最后一个值
['b', 2.0]
>>> list[:] #若只有一个冒号,则表示整个列表,这是复制列表的一个方法
[1, 'a', 'b', 2.0]
#切片包含左值,而不包含右值
2.4 列表索引
1.count(值)函数
Count函数返回特定值在列表中的出现次数,若不存在返回0
2.参数值 in 列表
如:list = [1,2,3,4]
1 in list 返回True,若不存在,返回False
3.index(值)函数
Index函数返回参数值在列表中第一次出现的位置索引值,若参数值不存在,则函数报错,程序崩溃,而不是返回-1。
2.5 列表删除
list = [1,2,3,4]
1. del语句删除
在知道元素索引的情况下,使用del语句删除列表元素
del list[1]
结果:list = [2,3,4]
2.remove()函数
在不知道列表索引而要删除某个元素时,使用remove函数删除
List.remove(3)
List = [2,4]
注:若删除一个不存在的列表中的元素,将会报错。
3.pop()函数
pop()函数从列表末尾删除一个元素,并返回删除的元素值,若列表为空,则报错。
pop(索引值)从列表中删除指定元素,并返回删除的元素,若索引无效,则报错
2.6布尔上下文中的列表
List = []
若列表为空,则布尔值为假
若列表不为空,则布尔值为真
例:
def func(anything):
if anthing:
print(‘true’)
else:
print(flase)
if ‘__name__ == ‘__main__’
func([])
func([2])
>>>flase
>>>true
2.7列表解析
列表解析提供了一种紧凑的方式,实现通过对列表中每一个元素应用一个函数的方法来将一个列表映射到另一个列表。在列表解析中可以使用任何python表达式。
>>> a_list = [1, 9, 8, 4]
>>> [elem * 2 for elem in a_list]
[2, 18, 16, 8]
3.元组
元组是不可变的列表,一旦创建之后,用任何方法都不可以修改元素。除了不可修改添加元素,元组的操作方法可列表大致相同。例如没有append(),extend(),insert(),remove(),pop这样的方法,但是元组可以进行切片操作,因为这样创建了一个新的元组。
1.元组的创建
使用圆括号创建元组,tuple = (1,2,’a’)
元组可以进行多值赋值:
v = (1,2,3)
a,b,c = v
2.元组的遍历
元组使用索引进行遍历读取
>>>Tuple[2]
2
3.元组的优点
(1)元组的速度比列表更快。如果定义了一系列常量值,而所需做的仅是对它进行遍历,那么请使用元组替代列表。
(2)对不需要改变的数据进行“写保护”将使得代码更加安全。使用元组替代列表就像是有一条隐含的 assert 语句显示该数据是常量,特别的想法(及特别的功能)必须重写。
(3)一些元组可用作字典键(特别是包含字符串、数值和其它元组这样的不可变数据的元组)。列表永远不能当做字典键使用,因为列表不是不可变的。
4.元组和列表的转换
元组可转换成列表,反之亦然。内建的 tuple() 函数接受一个列表参数,并返回一个包含同样元素的元组,而 list() 函数接受一个元组参数并返回一个列表。从效果上看, tuple() 冻结列表,而 list() 融化元组。
4.集合
集合set是装有独特值的无序”袋子“,集合可以包含任何数据类型的值,两个集合可以并、交、差等集合运算。
1.集合的创建
创建一个空集合:
(1)set = {} 或 set = {1,2,3}使用花括号创建一个集合或空集合
(2)set = set() 若初始没有元素,可以使用内置函数创建空集合
2.集合的添加
使用add(参数)或update(集合参数)向集合添加元素
>>>set = {1,2,3}
>>>set.add(4) #add()方法接收任意类型的单个参数,向集合中添加元素
>>>set
{1,2,3,4}
>>>set.update({5,6,7}) #update()方法接收一个或多个集合(列表也可以)作为参数,并将其他所有成员添加到集合中,就像调用add()一样
>>>set
{1,2,3,4,5,6,7}
3.集合的删除
集合有三种删除元素的方法,discard、remove,pop。
>>>set = {1,2,3,4}
>>>set.discard(2) #discard删除指定元素,
>>>set
{1,3,4}
>>>set.discard(2) #当删除不存在的元素时,不报错
>>>set.remove(3) #remove删除指定元素
>>>set
{1,4}
>>>set.remove(3) #当删除不存在元素时,报keyerror错误
keyerror:21
>>>set = {1,2,3,4}
>>>set.pop() #pop从集合中随机删除一个元素
>>>set
{1,2,4}
4.集合常见操作
(1)in判断一个值是否在集合中
(2)union将两个集合合并,返回一个新集合
(3)insertsection返回一个同时在两个集合中出现的新集合,
(4)difference 如a.difference(b)返回集合a中出现而没有b中没有的新集合
(5)symmetric_diffence返回只在一个集合中出现的元素的新集合
5.集合解析
和列表解析相似
5.字典
字典是键值对的无序集合,向字典添加键的同时,必须为该键添加一个值。
字典并非只能用于字符串。字典的值可以是任何数据类型,包括整数、布尔值、任何对象,甚至是其它的字典。而且就算在同一字典中,所有的值也无须是同一类型,您可根据需要混合匹配。字典的键要严格得多,可以是字符串、整数和其它一些类型。在同一字典中也可混合、匹配使用不同数据类型的键。
1.字典创建
字典的创建和集合一样,当时必须为其指定键值对
dict = {key:value}
然后通过键来访问值,dict[key],若访问到不存在的键,则报错
2.字典修改和添加
dict = {a:1,b:2}
直接通过键来修改值,dict[a] = 3
>>>dict
{a:3,b:2}
字典添加通过向字典添加键值对实现:
Dict[c] = 4
>>>dict
{a:3,b:2,c:4}
3. 字典解析
和列表解析相似
例:交换字典的键和值
>>> a_dict = {'a': 1, 'b': 2, 'c': 3}
>>> {value:key for key, value in a_dict.items()}
{1: 'a', 2: 'b', 3: 'c'}
6.none类型
None 是 Python 的一个特殊常量。它是一个 空 值。 None 与False 不同。 None 不是 0 。None 不是空字符串。将 None 与任何非 None 的东西进行比较将总是返回 False 。None 是唯一的空值。它有着自己的数据类型( NoneType)。可将 None 赋值给任何变量,但不能创建其它 NoneType 对象。所有值为None 变量是相等的。
三、 函数
**功能性、封装性、复杂性是函数的三大特性**
1.内置函数
Python提供了很多内置函数,不需要我们去实现函数,直接就可以调用,如下是一些内置函数:
abs(),bytes(),chr(),ord(),eval(),compile(),dir(),help(),divmod(),isinstance(),filter(),map(),globals(),max(),min(),sum(),type(),len(),range(),input(),tuple()
2.自定义函数
函数是具有一定功能的代码块,该代码块可以重复的执行。
函数的定义方式如下:
def 函数名(参数列表):
函数体
3.pass
在Python中,函数不允许没有函数体,此时,我们就可以使用pass来进行占位。pass表示空语句,用在函数中用来进行占位。不过,pass也可以放在选择与循环体中。
4.参数
默认值参数:
如果形参含有默认值,则在函数定义时,含有默认值的形参一定要定义在不含默认值的形参之后。这是因为,如果形参含有默认值,则意味着,该参数是一个可选参数,在函数调用时,可以选择性的进行传值。如果允许含有默认值的形参定义在不含默认值的形参前面,就会造成混淆。例如:
def f(length=3, width, height=4):
f(5, 8)这样调用将会出错
命名关键字参数:
除了位置参数之外,我们还可以使用命名关键字参数。所谓命名关键字参数,就是在调用函数时,显式指定“参数名=参数值”的形式,即指定要给哪一个形参传递值。同时,我们也可以在调用函数时,混合使用位置参数与关键字参数。但是位置参数放在前面。
可变参数:
可变参数(*),也可以叫收集参数。函数调用时,位置可变参数(形参)可以用来接收所有未匹配的位置参数(实参)并封装成元组传递给函数。
def add(**args) 以元组的形式接收多个参数值
关键字参数:
关键字可变参数(形参)可以用来接收所有未匹配的关键字参数(实参)。所有未匹配的关键字参数会打包成一个字典。
对于关键字可变参数,可以用来接收一些可选的选项,设置等。对于选项较多时,如果将每个选项都用一个关键字参数来接收时,会显得函数定义特别庞大,此时,就可以使用一个关键字可变参数来实现。例如,在Requests库中,get函数定义为:
requests.get(url, params=None, **kwargs)
其中,kwargs可以接收很多选项,例如data,headers,cookies,files等。
对于可变参数,我们需要注意如下事项:
1.可变参数只能接收未匹配的(剩下的)实际参数,如果实际参数已经匹配某形式参数,则不会由可变参数接收。
2.在参数位置上,关键字可变参数必须位于函数参数列表的最后。
3.在位置可变参数后面定义的参数,将自动成为关键字参数。(为什么)
4.位置可变参数与关键字可变参数各自最多只能定义一个。
def f(a, *v, **kv)
5.返回值
函数也是可以具有返回值,该返回值会返回给函数的调用端。语法上,使用return来实现。当调用函数时,可以近似的认为是函数的返回值替换掉了函数的调用。如果在函数内没有显式使用return返回值,则返回值为None。
我们可以通过将多个值放入元组(列表或字典)中,从而返回多个值。