Python自动化 【第三篇】:Python基础-集合、文件操作、字符编码与转码、函数

1.        集合

1.1      特性

集合是一个无序的,不重复的数据组合,主要作用如下:

  • 去重,把一个列表变成集合实现自动去重。
  • set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作。

1.2     常用操作:

s = set([3,5,9,10])

# 创建一个数值集合

t = set("Hello")

# 创建一个唯一字符的集合

a = t | s

# 求 t 和 s 的并集

b = t & s

# 求 t 和 s 的交集

c = t – s

# 求差集(项在 t 中,但不在 s 中)

d = t ^ s

# 求对称差集(项在 t 或 s 中,但不同时出现在二者中)

1.3      基本操作:

t.add('x')

# 添加一项

s.update([10,37,42])

# 在 s 中添加多项

t.remove('H')

# 删除一项

len(s)

#  s e t 的长度

x in s

# 测试 x 是否是 s 的成员

x not in s

# 测试 x 是否不是 s 的成员

s.issubset(t)

s <= t

# 测试是否 s 中的每一个元素都在 t 中

s.issuperset(t)

s >= t

# 测试是否 t 中的每一个元素都在 s 中

s.union(t)

s | t

# 返回一个新的 set 包含 s 和 t 中的每一个元素

s.intersection(t)

s & t

# 返回一个新的 set 包含 s 和 t 中的公共元素

s.difference(t)

s - t

# 返回一个新的 set 包含 s 中有但是 t 中没有的元素

s.symmetric_difference(t)

s ^ t

# 返回一个新的 set 包含 s 和 t 中不重复的元素

s.copy()

# 返回 set “s”的一个浅复制

2.       文件操作

2.1     文件操作流程

示例文件:

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

games:x:12:100:games:/usr/games:/sbin/nologin

gopher:x:13:30:gopher:/var/gopher:/sbin/nologin

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

nobody:x:99:99:Nobody:/:/sbin/nologin

dbus:x:81:81:System message bus:/:/sbin/nologin

2.2     基本操作

f = open('file.txt')

# 打开文件

first_line = f.readline()

 

print('first line:',first_line)

# 读一行

print('我是分隔线'.center(50,'-'))

 

data = f.read()

# 读取剩下的所有内容,文件大时不要用

print(data)

# 打印文件

f.close()

# 关闭文件

2.3    打开文件的模式

  • r,只读模式(默认)。

  • w,只写模式。【不可读;不存在则创建;存在则删除内容;】

  • a,追加模式。【可读;不存在则创建;存在则只追加内容;】

    "+" 表示可以同时读写某个文件

    > r+,可读写文件。【可读;可写;可追加】

    > w+,写读

    > a+,同a

    "b" 表示处理二进制文件

    > rb

    > wb

    > ab

2.4     with语句

为了避免打开文件后忘记关闭,可以通过管理上下文,即:

1

2

3

with open('log','r') as f:

...

 

3.      字符编码与转码

3.1    字符编码方式

3.1.1  ASCII编码

ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。

3.1.2   Unicode编码

Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,所有的字符和符号最少(可能更多)由 16 位来表示(2个字节),即:2 **16 = 65536,这里还有个问题:字节数增加后使用空间会直接翻倍!举例还说:同样是ABCD这些字符存储一篇相同的文章,使用ASCII码如果是1M的话,那么Unicode存储至少2M可能还会更多。

3.1.3   UTF-8编码

是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存... 通过这种可扩展的方式来存储。

在2.x版本的Python中,解释.py文件的时候,默认是给他一个编码的就是ASCII码,如果在2.x版本中不指定编码并且在.py文件中写了一个ASCII码中没有的字符就会显示乱码,不过这个问题在Python3中就不存在了,因为在Python3中默认就是Unicode编码

3.2     Python编码转化

3.2.1   Python3中的编码转换

#在Python3中默认就是unicode编码

#!/usr/bin/env python
#-*- coding:utf-8 -*- name = '小岳岳'
#转为UTF-8编码
print(name.encode('UTF-8'))
#转为GBK编码
print(name.encode('GBK'))
#转为ASCII编码(报错为什么?因为ASCII码表中没有‘小岳岳’这个字符集~~)
print(name.encode('ASCII'))

3.2.2   Pyton2.x中的编码转换

#因为在python2.x中默认是ASCII编码,你在文件中指定编码为UTF-8,但是UTF-8如果你想转GBK的话是不能直接转的,需要Unicode做一个转接站点。

GBK转换为UTF-8格式流程:

> 首先通过解码(decode)转换为Unicode编码

> 然后通过编码(encode)转换为UTF-8编码

UTF-8转换为GBK格式流程:

> 首先通过解码(decode)转换为Unicode编码

> 然后通过编码(encode)转换为GBK编码

#!/usr/bin/env python
#-*- coding:utf-8 -*- import chardet
name = '小岳岳'
print chardet.detect(name)
#先解码为Unicode编码,然后再从Unicode编码为GBK
new_name = name.decode('UTF-8').encode('GBK')
print chardet.detect(new_name)

4.      函数

4.1    基本语法

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

特性:

  • 减少重复代码
  • 使程序变的可扩展
  • 使程序变得易维护

语法:

def function_name():#函数名

print("Hello, World!")

function_name() #调用函数

可以带参数:

def calc(x,y):

res = x**y

return res #返回函数执行结果

c = calc(a,b) #结果赋值给c变量

print(c)

4.2      函数参数与变量

4.2.1   函数参数

形参是在函数被调用时才分配内存单元,调用结束时立即释放所分配的内存单元,so,形参只在函数内部有效。

实参可以是常量、变量、表达式、函数等,实参在进行函数调用时必须有确,以便把这些值传给形参。故应预先用赋值,输入等办法使参数获得确定值。

上述函数中x,y是形参,a,b是实参。

默认参数

Def stu_register(name,age,country=”CN”):

这样,country参数在调用时不指定就是默认参数CN,指定了的话就是你指定的值。默认参数必须放在未指定默认值的后面。

关键参数

若给函数传参是不想按顺序的话可以指定关键字参数,只需指定参数名即可,但是,关键参数必须放在位置参数之后。

语法:

Stu_register(age=22,name=”poker”)

非固定参数

若函数定义时不确定用户想出入多少个参数,可使用非固定参数

 

Def stu_register(name,age,*args)  #args会把多传入的参数变成一个元组形式

Print(name,age,args)

Stu_register(“poker”,22)

#输出

Poker 22 ()  #后面这个空元组就是args,因为没传参所以空


Stu_register(“Tom”,28,”CN”,”Python”)

#输出

Tom 28 (‘CN’,’Python’)


还有一个**kwargs

Def stu_register(name,age,*args,**kwargs): #kwargs会把多传入的参数变成一个字典形式

Print(name,age,kwargs)

Stu_register(‘poker’,22)

#输出

#poker 22 () {} #后面这个{}就是kwargs,因为没传值,所以为空


Stu_register(“Tom”,28,”CN”,”Python”,sex=”Male”,school=”Qinghua”)

#输出

#Tom 28 (‘CN’,’Python’) {‘school’:’Qinghua’,’sex’:’Male’}

4.2.2   全局与局部变量

在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。

全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。

当全局变量与局部变量同名时,在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。

返回值

Return语句可以返回函数的返回值

> 函数执行时遇到return就会停止执行并返回结果,也代表着函数的结束

> 未指定return,函数返回None

递归

函数内部可以调用其他函数,若函数内部调用自身,该函数为递归函数。

def calc(n):

    print(n)

    if int(n/2) ==0:

        return n

    return calc(int(n/2))

calc(10)

输出:

10

5

2

1

递归特性:

> 需明确结束条件

> 进入更深一层递归时,规模要比上次有所减少

> 递归效率不高,递归层次过多会导致栈溢出

高阶函数

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

1

2

3

4

5

6

def add(x,y,f):

return f(x) + f(y)

res = add(3,-6,abs)

print(res)

 

python自动华 (三)的更多相关文章

  1. python自动华 (十八)

    Python自动化 [第十八篇]:JavaScript 正则表达式及Django初识 本节内容 JavaScript 正则表达式 Django初识 正则表达式 1.定义正则表达式 /.../  用于定 ...

  2. python自动华 (十七)

    Python自动化 [第十七篇]:jQuery介绍 jQuery jQuery是一个兼容多浏览器的javascript库,核心理念是write less,do more(写得更少,做得更多),对jav ...

  3. python自动华 (十)

    Python自动化 [第十篇]:Python进阶-多进程/协程/事件驱动与Select\Poll\Epoll异步IO 本节内容: 多进程 协程 事件驱动与Select\Poll\Epoll异步IO   ...

  4. python自动华 (八)

    Python自动化 [第八篇]:Python基础-Socket编程进阶 本节内容: Socket语法及相关 SocketServer实现多并发 1. Socket语法及相关 sk = socket.s ...

  5. python自动华 (七)

    Python自动化 [第七篇]:Python基础-面向对象高级语法.异常处理.Scoket开发基础 本节内容: 1.     面向对象高级语法部分 1.1   静态方法.类方法.属性方法 1.2   ...

  6. python自动华 (二)

    Python自动化 [第二篇]:Python基础-列表.元组.字典 本节内容 模块初识 .pyc简介 数据类型初识 数据运算 列表.元组操作 字符串操作 字典操作 集合操作 字符编码与转码 一.模块初 ...

  7. python自动华 (十六)

    Python自动化 [第十六篇]:JavaScript作用域和Dom收尾 本节内容: javascript作用域 DOM收尾 JavaScript作用域 JavaScript的作用域一直以来是前端开发 ...

  8. python自动华 (十四)

    Python自动化 [第十四篇]:HTML介绍 本节内容: Html 概述 HTML文档 常用标签 2. CSS 概述 CSS选择器 CSS常用属性 1.HTML 1.1概述 HTML是英文Hyper ...

  9. python自动华 (十五)

    Python自动化 [第十五篇]:CSS.JavaScript 和 Dom介绍 本节内容 CSS javascript dom CSS position标签 fixed: 固定在页面的某个位置 rel ...

随机推荐

  1. 【CodeForces】1172E. Nauuo and ODT

    题解 看了一遍题解(以及代码)但是没写代码-- 后来做梦的时候忽然梦到了这道题--意识到我需要补一下-- 这道题就是,对于每种颜色,把没有染成这种颜色的点标成黑点,然后计算每个联通块的平方 然后每个点 ...

  2. SSH协议(1)-工作原理及过程

    转载. https://blog.csdn.net/cjx529377/article/details/77659199 SSH全称是Secure Shell,SSH协议是基于应用层的协议,为远程登录 ...

  3. day0~day13

    day0 day1 day2 day4 day5 day7 day9 day10 day12 day13

  4. 『Python基础』第4节:基础数据类型初识

    本节只是对基础数据类型做个简单介绍, 详情会在之后慢慢介绍 什么是数据类型? 我们人类可以分清数字与字符串的区别, 可是计算机不能. 虽然计算机很强大, 但在某种程度上又很傻, 除非你明确告诉它数字与 ...

  5. 【动态规划】Überwatch

    Überwatch 题目描述 The lectures are over, the assignments complete and even those pesky teaching assista ...

  6. 标准Trie、压缩Trie、后缀Trie

    ref : https://dsqiu.iteye.com/blog/1705697 1.Trie导引 Trie树是一种基于树的数据结构,又称单词查找树.前缀树,是一种哈希树的变种.应用于字符串的统计 ...

  7. MySQL INNER JOIN子句介绍

    MySQL INNER JOIN子句介绍 MySQL INNER JOIN子句将一个表中的行与其他表中的行进行匹配,并允许从两个表中查询包含列的行记录. INNER JOIN子句是SELECT语句的可 ...

  8. JSP JSONArray使用遇坑!添加以下6个jar包

    1.JAR包简介 要使程序可以运行必须引入JSON-lib包,JSON-lib包同时依赖于以下的JAR包: commons-lang.jar commons-beanutils.jar commons ...

  9. HTTP参数污染(参数处理图)

  10. TODO页面

    功能:1.根据数据显示当前所未完成的事件, 2.可通过输入框进行事件的添加,可标记已完成的事件并进行删除,可修改已添加的事件. ps:插件引入均使用本地文件,需改用静态CDN. 效果: 代码实现: & ...