原文地址:
编辑:智能算法
前面系列我们一起学了
今天继续一起学习python的基础知识。
目录
1. 集合操作
2. 文件操作
3. 字符编码与转码
4. 函数
1. 集合操作
集合是一个无序的,不重复的数据组合,它的主要作用如下:
去重,把一个列表变成集合,就自动去重了
关系测试,测试两组数据之前的交集、差集、并集等关系
1.1列表去重
1.2符号操作
1.3增删改查
2. 文件操作
2.1 对文件操作流程
a. 打开文件,得到文件句柄并赋值给一个变量
b. 通过句柄对文件进行操作
c. 关闭文件
如下代码运行,“print(date2)”会打印test文件内容么?
是不会有内容的,当运行“data = f.read()”时,文件句柄已经移动到文件末尾,再次读取是取不到内容的。需要使用“seek”移动文件句柄
2.2 文件打开模式
2.3 文件操作
关于文件读取
f.readline()和f.readlines()的区别:
所以,f.readlines()通过下标就可以知道当前在哪一行了。但和f.read()一样都是文件全加载到内存中,文件大的话内存就占满了。
推荐读取方式
模拟yum安装时的进度条
文件内容修改
前面说的文件修改,只是对原内容覆盖,并不会插入内容,原内容往后移,因为这样有可能就把其他文件覆盖了,文件发生损坏。so:
文件修改两个办法:
a. 加载到内存,内存修改,覆盖写回
b. 另打开一个文件,修改完写到新文件中
文件关闭(with语句)
为了避免打开文件后忘记关闭,可以通过管理上下文,即:
如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。
在Python 2.7 后,with又支持同时对多个文件的上下文进行管理
3. 字符编码与转码
3.1 Python编码详解
为什么我们要加“#-*- coding:utf-8 -*-”这一行?意思是置顶编码类型为utf-8编码!
为什么我们能看到这些文字、数字、图片、字符、等等信息呢?大家都知道计算机本身只能识别 0 1 的组合,他们是怎么展示这些内容的呢?我们怎么和计算机去沟通呢?
那怎么办?如何让计算机理解我们的语言,并且我们能理解计算机的语言呢?
ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。
在存储英文的时候我们至少需要1个字节(一个字母),就是8位(bit),看下ASCII表中1个字节就可以表示所有的英文所需要的字符,是不非常高效!
为什么呢?早期的计算机的空间是非常宝贵的!
那你会发现1个字节8位,他能存储的最大数据是2的8次方-1 = 255,一个字节最多能表示255个字符 那西方国家他们使用了127个字符,那么剩下字符是做什么的呢?就是用来做扩展的,西方人考虑到还有其他国家。所以留下了扩展位。
ASCII到了其他国家,完全不够用,于是就在原有的扩展位中,扩展出自己的gbk、gb2312、gb2318等字符编码。
他是怎么扩展的呢?比如说在ASCII码中的128这个位置,这个位置又指定一张单独表。于是每个国家都有自己的字符编码,也产生了1、没有字符集: 2、字符集冲突
为了统一起来,Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,
规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536, 注:此处说的的是最少2个字节,可能更多。
这里还有个问题:使用的字节增加了,那么造成的直接影响就是使用的空间就直接翻倍了!
为了解决个问题就出现了:UTF-8编码
UTF-8编码:是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存…
OK 上面了解了:
1、什么ASCII编码
2、什么Unicode编码
3、什么UTF-8编码
回顾下乱码的出现原因:1、没有字符集 2、字符集冲突
3.2 Python编码转换
python3中,默认就是unicode编码
3.3 Python2.X中的编码转换
python2.X中默认是ASCII编码,你在文件中指定编码为UTF-8,但是UTF-8如果你想转GBK的话是不能直接转的,的需要Unicode做一个转接站点
声明只是文件的编码,python 3 的变量都是Unicode编码。
4. 函数
4.1 程序设计方法
(不定义return,python隐式返回None。函数和函数式编程不是一回事,思想更接近数学运算,数学上的函数。一种抽象成都很高的编程范式。。函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数)
4.2 函数基本语法及特性
函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可。函数是逻辑结构化和过程化的一种编程方法。
特性:
代码复用
使程序变的可扩展
使程序变得易维护
语法定义
4.3 函数参数与局部变量
形参
变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量
实参
可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值
默认参数
非必须传递
关键参数
正常情况下,给函数传参数要按顺序,不想按顺序就可以用关键参数,只需指定参数名即可,但记住一个要求就是,关键参数必须放在位置参数之后。
非固定参数
*args 会把多传入的参数变成一个元组形式
**kwargs 会把多传入的参数变成一个字典形式
全局与局部变量
在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。顶级的都是全局变量,函数中变量修改,函数中加global 变量名不应该在函数里改全局变量,因为来回调用,就乱了。
列表、字典、集合可以在函数中修改。
4.4 返回值
函数在执行过程中只要遇到return语句,就会停止执行并返回结果
如果未在函数中指定return,那这个函数的返回值为None
4.5 递归
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。
递归特性:
必须有一个明确的结束条件
更深一层递归时,问题规模相比上次递归都应有所减少
递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
4.6 匿名函数
匿名函数主要是和其它函数搭配使用的,如下
4.7 高阶函数
变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。
声明:本文系网络转载,版权归原作者所有。如涉及版权,请联系删除!
领取专属 10元无门槛券
私享最新 技术干货