第三章、函数编程

(一)三元运算

三元运算又称三目运算,对简单条件语句的简写,如:

if 条件成立:

val =1

else:

val =2

三元运算:

val =1 if 条件成立 else 2

 

(二)文件处理

f=open(file="file_path",mode='r',encoding='utf-8')

data=f.read()

f.close()

1、二进制模式

r:文本只读模式,默认将二进制转换为字符串

rb:二进制模式读取,不进行转码,硬盘怎么存储怎么读取。如网络传输的文本或img或视频等。不写encoding参数

2、智能检测编码工具,chardet

chardet.detect()

3、写模式操作文件:

w:可写模式,创建新文件。有则覆盖,无责创建

wb:二进制模式写入,无需encoding参数。写视频,图片等。

4、追加模式:

a:普通追加模式

ab:二进制模式追加

5、混合模式:

r+:先读取内容,支持内容追加

w+:先写入(创建)内容,支持内容读取

6、文件操作其他方法:

fileno()返回文件句柄在内核中的索引值,IO多路复用可用

flush()把文件从内存buffer(缓存)里强制刷新到硬盘

readline()只读一行,遇到 或 为止

seek()移动光标到指定位置 ,按字节移动光标,utf-8三个字节一个字符,gbk两个字节一个字符

seekable()判断文件是否可进行seek操作

tell()返回光标所在位置,按字节返回光标

truncate()按指定长度截断文件,按指定长度截取文件,均从首位截取

writable()判断文件是否可写

7、文件修改

逐行,os.rename()重命名,truncate()截取

(三)函数编程

1、函数基本介绍

将一组语句集合通过一个名字封装起来,想要执行这个函数,只需要调用其函数名即可。

def sayhi():#函数名
print("Hello,I'm nobody!")

减少重复代码

使程序变的可扩展,易维护

2、函数默认参数

形参:只有在被调用时,才分配内存单元。只在内部有效。函数调用结束返回主调用函数后不能在使用该形参变量

实参:可以是常量、变量、表达式、函数等,无论类型,在调用时他们都必须有确定的值,以便将这些值传

默认参数:默认参数必须跟在位置参数(非默认参数)后面

3、函数关键参数

只需要在调用的时候指定参数名,关键参数也必须放在位置参数之后。

4、非固定参数

*形参名,将参数组成元组。一般都写成*args。可直接传递列表或元组。传入列表将打包成元组的第一个参数,为避免该问题,在列表或元组前面加*符号。

**行参名,一般写成**kwargs,单个字典传入需在实参前加**符号

5、返回值

默认返回None,return只能放函数最后位置,表示一个函数终止。支持任意类型数据返回,包括函数名

6、函数局部变量

在函数内部定义的变量称局部变量,只能在函数内部使用,函数执行完则回收。里面能调用外面参数,外面不能调用函数内部变量。如果函数内部和外部都有一个同名变量,函数将从内至外查找。

7、函数全局变量

定义在函数外部一级代码的变量,叫全局变量,从上至下全局可用。函数内部默认无法修改全部变量,修改默认则创建局部变量。

8、函数内部修改全局变量

用global关键字声明

9、函数内部修改全局列表

可修改列表内容,不能修改列表整体。修改整体需global关键字。

10、函数嵌套

函数内部再定义函数。要想执行必须调用

11、函数作用域

在py中,一个函数就是一个作用域。局部变量放置在其作用域中。一个变量定义完成后,作用域就已经确定

12、匿名函数

多行语句变为一行,减少代码量,看着更高级

#常规函数
def calc(x,y):
if x < y:
return x*y
else:
return x/y
#声明匿名函数
func=lambda x,y:x*y if x<y else x/y
print(calc(9,8))
print(func(9,8))

 

和其他方法混用

#求一个列表元素平方
data=list(range(10))
print(data)

for index,i in enumerate(data):
data[index]=i*i
print(data)

#匿名函数方法
print(list(map(lambda x:x*x,data)))

13、高阶函数

变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接受另一个函数作为参数,这种函数称为高阶函数。

 

 

 

 

 

 

 

 

 

 

(五)数据类型

1、浮点数

(1)、定义:有限小数和无线循环小数统称为浮点数

(2)、Python中精确度:只能精确到小数点后16位,因存储结构问题,其他语言也有相似问题。

(3)、高精度计算方法:用decimal中的getcontshext()和Decimal()方法

2、列表

列表是一个有序数据集合,集合内可以放任何数据,可对集合操作增删改查操作。

(1)、创建:L1=[]或L1=list()

(2)、查询:通过索引进行查询。查找索引值index(),只能找到第一个匹配项。统计count()方法

(3)、切片:L2=L1[x:y:j],顾头(x)不顾尾(x)原则,j为步长

(4)、增加:append()方法追加元素到末尾,insert(i,x)方法插入元素到指定位置,两个列表相加可用"+"符号连接,也可用L1.extend(L2)方法

(5)、修改:L1[i]="new obj"或L1[x:y]="new obj"

(6)、删除:L1.pop()删除末尾元素并返回该对象。L1.remove(obj)删除指定对象(查找的第一个),L1.remove(i)删除index为i的元素。Del L1删除列表L1对象,del L1[x:y]删除多个元素。清空列表L1.clear()

(7)、循环:

(8)、排序:L1.sort(),只能通类型排序。L1.reverse()反转序列

(9)、copy:只能第一层列表独立即浅复制,需要整个列表对象完全独立需用导入copy模块,用copy.deepcopy()方法

3、字符串

字符串是一个有序的字符的集合,用于存储和表示基本的文本信息,一对单、双、三引号中间包含的内容称之为字符串。

1、特性:

.有序

‚.不可变

2、方法:

s.swapcase()大小写转换

s. capitalize()首字母大写,其他小写

s. casefold()转换成小写

s.center()格式化字符串,指定字符串长度和两边占位符

s.count()统计字符串,可指定统计范围

s.endswith()判断是否以某字符结尾

s.expandtabs()扩展table键,即指定table键的长度

s.find()返回指定字符索引,找不到返回-1,也可指定范围

s.format()字符串格式化,

s.index()返回自定字符的索引,可指定开始和结束

s.isalnum()是否是阿拉伯字符,包括数字和字母

s.isalpha()是否全是字母

s.isdigit()类似s.isdecimal()或s.isnumeric()是是否全是整数

s.isidentifier()是否为可用变量名

s.isprintable()

s.isspace()判断是否为空格

s.istitle()第一个字符均大写

s.isupper()是否均为大写

s.lower()转换为小写

s.upper()转换为大写

s.join()字符串拼接

s.ljust()从左边开始,将字符串变为指定长度字符串,类似rjust()

s.strip()去掉指定字符串,默认为空格和换行

s.lstrip()去掉左边指定字符串rstrip()

str.maketrans()创建对应表格

s.translate()更具表格翻译字符串

s.partition()以某字符串将字符串分割成两半,左边查找到的第一个字符rpartition相反

s.replace()替换字符串,可指定更换个数

s.rfind()查找最右边指定字符,找不到返回-1

s.rindex()类似rfind,找不到则报错

s.strip()根据自定字符分割成列表

s.rstrip()默认和strip无区别

s.splitlines()按行分割

s.startwith()判断以某字符串开始

s.endwith()判断以某字符结束

s.title()变为title格式

s.zfill()将字符串变为指定长度,不够的左边填零

3、元组

一旦创建,便不能再修改,也叫只读列表

功能:

index

count

切片

‚作用:显示告知,不能修改,如配置信息等

4、hash

将任意长度的消息压缩到某一固定长度的消息后再输出。不通的输入通过散列算法可能会散列成相同的输出,所以不能从散列值来唯一确定输入值。因此被hash的值必须是不可变的,如数字、字符串、元组等。

用途:

文件签名

Md5加密

密码验证

语法:

hash(obj)

5、字典

字典是一种key-value的数据类型,key必须唯一,且可hash,字典无序的,且查找速度快。

判断是否存在:in方法

获取:get(),有则返回,无则返回None。直接中括号获取,无则报KeyError

删除:pop('key')删除指定key并返回key对应的value,popitem()随机删除一个,clear(),del d['key']

多级嵌套:

copy():类似列表copy

values():打印所有值

keys():打印所有key

items():key和value组成元组,并放入一个列表中

update():类似list中extend(),两个字典合并成一个,重复key则覆盖

setdefault():有key则获取,无key则设置

fromkeys():批量生成字典

6、集合

无序,不重复的数据集合。作用为去重(把列表变为集合自动去重)和关系测试

列表和元组可转换为集合。

add():增加,只能添加一个

pop():随机删除一个值

remove():删除指定对象,不存在则报错

discard():删除指定对象,不存在也不报错

update():两个集合联合在一起,可添加多个值,列表方式

clear():清空

关系测试:

交集:intersection()或&

差集:difference()或-

并集:union()或|

取交集相反(对称差集):symmetric_difference()

判断是否子集:issubset()或<=

判断是否为超集:issuperset()或>=

判断两个集合是否相交:isdisjoint()

(六)进制拾遗

1、python中进制转换

oct(int):转八进制

hex(int):转十六进制

bin(int):转二进制

2、为何使用十六进制

八进制很少使用。

在操作系统和编码中均使用十六进制,方便查看,统一规范,便于网络抓包分析。

3、十六进制与二进制转换

二进制转16进制:取四合一(从左朝右取四位二进制转换成10进制)

16进制转二进制:刚好与二进制转16进制相反

表示:0x前缀(有时会将0忽略掉)或BH后缀

(七)字符编码

1、UTF是unicode编码设计得一种在存储和传输时节省空间得编码方案

2、decode(),encode()

3、可通过type()查看字符类型

4、python3中文件默认为utf-8编码,字符串编码是unicode

python2文件默认是ascii嘛,字符串默认是ascii码,若文件头有声明编码类型,则字符串编码也就是该类型。unicode类型在python2中是单独一个类型。

5、python中bytes类型:

、在py2中,bytes和str是一回事儿,因为要表示图片视频等二进制格式得数据,所以有bytes类型。py2以utf8编码的字符串在Windows下无法显示。decode()或声明为unicode。

‚、在py3中,str等于unicode

原文地址:https://www.cnblogs.com/yaya625202/p/8611518.html