首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python学习(三)-集合、文件操作、字符编码和函数

原文地址:

编辑:智能算法

前面系列我们一起学了

今天继续一起学习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 高阶函数

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

声明:本文系网络转载,版权归原作者所有。如涉及版权,请联系删除!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180806B08GAL00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券