鸡汤:

  多学习,多看书。

  推荐书籍:《追风筝的人》,《林达看美国》,《白鹿原》

本节知识点

  1. 集合及其操作
  2. 文件操作
  3. 函数与函数式编程
  4. 递归

一.集合及其操作

  集合(set):把不同的元素组成一起形成集合,是python基本的数据类型。下面是set的基本操作:

   关系测试:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author:wanghui
#set_1 = set([123,345,678]) #创建set
l1 = [11,22,33,44,55]
l2 = [33,44,55,66]
l1_s = set(l1) #将列表转换成set
l2_s = set(l2)
#####关系测试
#交集:取出两者相同的部分
print(l1_s.intersection(l2_s))
print(l1_s & l2_s)
#并集:两者合并起来去重
print(l1_s.union(l2_s))
print(l1_s | l2_s)
#差集:两者之间一方有而另一方没有的
print(l1_s.difference(l2_s))
print(l1_s - l2_s)
#子集 or 父集:两者有相互包含的关系,如果我中有你也就是说你是我的子集,返回True,反之为false
print(l1_s.issubset(l2_s)) #子集判断
print(l1_s.issuperset(l2_s)) #父集判断
#对称差集:去除交集之后剩下的集合元素
print(l1_s.symmetric_difference(l2_s))
print(l1_s ^ l2_s)
#二者是否有交集
print(l1_s.isdisjoint(l2_s)) #返回True表示二者无交集,False表示有交集

  基本操作:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author:wanghui
l1_s = set([123,456,891,22,33])
#add操作:单独添加一个集合元素的操作(集合也是无序的)
l1_s.add(888)
print(l1_s)
#update操作:添加多个集合元素
l1_s.update([333,1243,45,2332])
print(l1_s)
#remove()操作:删除其中的一项
l1_s.remove(45)
print(l1_s)
#len操作:确定元素个数
print(len(l1_s))
#in操作:成员判断操作
"x" in l1_s
"x" not in l1_s
#pop操作:删除任意的一个,并返回删除的元素
print(l1_s.pop())
#discard操作:和remove不同的一点在于:discard在指定删除不存在的元素时不会报错(返回None),然而remove会报错
print(l1_s.discard("sdadasd"))

二.文件操作

  文件的操作过程要注意到:文件的代开,文件的读取,文件的写入和创建以及到最后的追加和关闭操作

  文件实例

Somehow, it seems the love I knew was always the most destructive kind
不知为何,我经历的爱情总是最具毁灭性的的那种
Yesterday when I was young
昨日当我年少轻狂
The taste of life was sweet
生命的滋味是甜的Somehow, it seems the love I knew was always the most destructive kind
不知为何,我经历的爱情总是最具毁灭性的的那种
Yesterday when I was young
昨日当我年少轻狂
The taste of life was sweet
生命的滋味是甜的
As rain upon my tongue
就如舌尖上的雨露
I teased at life as if it were a foolish game
我戏弄生命 视其为愚蠢的游戏
The way the evening breeze
就如夜晚的微风
May tease the candle flame
逗弄蜡烛的火苗
The thousand dreams I dreamed
我曾千万次梦见
The splendid things I planned
那些我计划的绚丽蓝图
I always built to last on weak and shifting sand
但我总是将之建筑在易逝的流沙上
I lived by night and shunned the naked light of day
我夜夜笙歌 逃避白昼赤裸的阳光
And only now I see how the time ran away
事到如今我才看清岁月是如何匆匆流逝
Yesterday when I was young
昨日当我年少轻狂
So many lovely songs were waiting to be sung
有那么多甜美的曲儿等我歌唱
So many wild pleasures lay in store for me
有那么多肆意的快乐等我享受
And so much pain my eyes refused to see
还有那么多痛苦 我的双眼却视而不见
I ran so fast that time and youth at last ran out
我飞快地奔走 最终时光与青春消逝殆尽
I never stopped to think what life was all about
我从未停下脚步去思考生命的意义
And every conversation that I can now recall
如今回想起的所有对话
Concerned itself with me and nothing else at all
除了和我相关的 什么都记不得了
The game of love I played with arrogance and pride
我用自负和傲慢玩着爱情的游戏
And every flame I lit too quickly, quickly died
所有我点燃的火焰都熄灭得太快
The friends I made all somehow seemed to slip away
所有我交的朋友似乎都不知不觉地离开了
And only now I'm left alone to end the play, yeah
只剩我一个人在台上来结束这场闹剧
Oh, yesterday when I was young
噢 昨日当我年少轻狂
So many, many songs were waiting to be sung
有那么那么多甜美的曲儿等我歌唱
So many wild pleasures lay in store for me
有那么多肆意的快乐等我享受
And so much pain my eyes refused to see
还有那么多痛苦 我的双眼却视而不见
There are so many songs in me that won't be sung
我有太多歌曲永远不会被唱起
I feel the bitter taste of tears upon my tongue
我尝到了舌尖泪水的苦涩滋味
The time has come for me to pay for yesterday
终于到了付出代价的时间 为了昨日
When I was young
当我年少轻狂
As rain upon my tongue
就如舌尖上的雨露
I teased at life as if it were a foolish game
我戏弄生命 视其为愚蠢的游戏
The way the evening breeze
就如夜晚的微风
May tease the candle flame
逗弄蜡烛的火苗
The thousand dreams I dreamed
我曾千万次梦见
The splendid things I planned
那些我计划的绚丽蓝图
I always built to last on weak and shifting sand
但我总是将之建筑在易逝的流沙上
I lived by night and shunned the naked light of day
我夜夜笙歌 逃避白昼赤裸的阳光
And only now I see how the time ran away
事到如今我才看清岁月是如何匆匆流逝
Yesterday when I was young
昨日当我年少轻狂
So many lovely songs were waiting to be sung
有那么多甜美的曲儿等我歌唱
So many wild pleasures lay in store for me
有那么多肆意的快乐等我享受
And so much pain my eyes refused to see
还有那么多痛苦 我的双眼却视而不见
I ran so fast that time and youth at last ran out
我飞快地奔走 最终时光与青春消逝殆尽
I never stopped to think what life was all about
我从未停下脚步去思考生命的意义
And every conversation that I can now recall
如今回想起的所有对话
Concerned itself with me and nothing else at all
除了和我相关的 什么都记不得了
The game of love I played with arrogance and pride
我用自负和傲慢玩着爱情的游戏
And every flame I lit too quickly, quickly died
所有我点燃的火焰都熄灭得太快
The friends I made all somehow seemed to slip away
所有我交的朋友似乎都不知不觉地离开了
And only now I'm left alone to end the play, yeah
只剩我一个人在台上来结束这场闹剧
Oh, yesterday when I was young
噢 昨日当我年少轻狂
So many, many songs were waiting to be sung
有那么那么多甜美的曲儿等我歌唱
So many wild pleasures lay in store for me
有那么多肆意的快乐等我享受
And so much pain my eyes refused to see
还有那么多痛苦 我的双眼却视而不见
There are so many songs in me that won't be sung
我有太多歌曲永远不会被唱起
I feel the bitter taste of tears upon my tongue
我尝到了舌尖泪水的苦涩滋味
The time has come for me to pay for yesterday
终于到了付出代价的时间 为了昨日
When I was young
当我年少轻狂呵呵呵呵呵呵呵呵呵!!!!

基本操作:

###文件读取操作
#data = open("yesterday",encoding="utf-8").read() #读取所有的内容
# f = open("yesterday",encoding='utf-8')
# data = f.read()
# data2 = f.read()
# print(data)
# print("-----》》》",data2) ###文件写入操作
# f =open("yesterday","w",encoding='utf-8') #写入操作:如果文件不存在则会创建新文件,否则会覆盖原来的文件
# f.write("我勒个去!!!")
# f.close() ###文件追加操作
f = open("yesterday","a",encoding='utf-8') #追加操作:不能执行读操作
f.write("呵呵呵呵呵\n呵呵呵呵!!!!")
f.close()

  读取操作:

#!/usr/bin/env python
# -*- coding:utf-8 -*- f = open("yesterday","r",encoding='utf-8')
for i in range(5):
print(f.readline()) #读取前5行 for line in f.readlines(): #readlines()将文件按照列表读取
print(line.strip()) #去掉空格和换行

  比较高效的读取方式:

count = 0
for line in f:
if count == 9: #读取到第九行,并打印
print("------分割线---------")
count += 1
continue
print(line.strip())
count += 1

  其他方法:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
f = open("yesterday","r",encoding='utf-8')
print(f.tell()) #读取文件行位置(按字符个数计数的)
#print(f.readline()) #按行读取
print(f.read(5)) #读取前5个字符
print(f.tell())
f.seek(0) #seek只能够按照字符所在位置返回,不能够按行返回
print(f.encoding) #打印文件编码
print(f.fileno()) #返回文件在内存中的编号
print(f.name) #打印文件名称
#f.seekable() #用于终端设备文件读取的移回
print(f.readable()) #判断文件是否可读
print(f.writable()) #判断文件是否可写
print(f.flush()) #将内容从内存刷到硬盘
f.truncate(10) #截断

  文件读写进阶:

   打印进度条程序:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author:wanghui
import sys,time
for i in range(50):
sys.stdout.write("#")
sys.stdout.flush()
time.sleep(0.1)

  读写进阶:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author:wanghui
#f = open('yesterday','r+',encoding='utf-8') #读写
#f = open("yesterday",'w+',encoding='utf-8') #写读模式
#f = open("yesterday",'a+',encoding='utf-8') #追加读
f = open('yesterday','rb') #二进制格式去读,不能传入encoding(网络传输,)
f = open("yesterday",'wb') #二进制格式去写
f.write('helloworld'.encode())
# print(f.readline())
# print(f.readline())
# print(f.readline())
# f.write("----哈哈哈哈哈111----\n")
# f.write("----哈哈哈哈哈2222----\n")
# f.write("----哈哈哈哈哈3333----\n")
# f.write("----哈哈哈哈哈4444----\n")
# f.write("----哈哈哈哈哈5555----\n")
# print(f.tell())
# f.seek(10)
# print(f.readline())

  文件修改(需要读取和修改文件两步操作)

#!/usr/bin/env python
# -*- coding:utf-8 -*-
f = open("yesterday",'r',encoding='utf-8')
f_new = open("yesterday2.bak",'w',encoding='utf-8') for line in f: #遍历旧文件
if "肆意的快乐" in line: #如果肆意的快乐在读取到的行中
line = line.replace("肆意的快乐","肆意的快乐等我去享受!") #替换操作
f_new = f_new.write(line) #写入操作
f.close() #文件关闭
f_new.close()

  with操作:

with open("yesterday",'r',encoding='utf-8') as f\
,open("yesterday2",'w',encoding='utf-8') as f_new:

编码问题:

python 2.7的编码问题

#!/usr/bin/env python
#-*-coding:utf-8 -*-
import sys
print(sys.getdefaultencoding())
s="哈喽啊!!"
s_to_gbk = s.decode('utf-8').encode('gbk')
print(s_to_gbk)
print(type(s))

  

python3的写法:
#!/usr/bin/env python
# -*- coding:gbk -*-
import sys
print(sys.getdefaultencoding())
s = "哈哈哈,好屌啊!!"
s_to_gbk = s.encode('gbk')
print(s_to_gbk)

三、函数式编程

函数的定义:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
def test(x):
"the function of description!"
x+=1
return x
#def:定义函数的关键字
#test:函数名
#(x):x为形式参数
#"":定义函数的描述
#x+=1:泛指代码中的处理逻辑
#return:定义返回值

函数和过程:

#!/usr/bin/env python
# -*- coding:utf-8 -*- #函数
def fun1():
'''testing'''
print("in the func1")
return 0 #过程:没有return这个的函数
def func2():
'''testing2'''
print("in the funct2!") x=fun1()
y=func2()

函数的优点:实现代码的拓展性;简化代码;保持数据的一致性;

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author:wanghui
import time #导入时间模块 def logger():
time_format = '%Y-%M-%d %X' #时间格式定义
time_current = time.strftime(time_format) #当前时间的定义
with open('a.txt','a') as f: #文件追加
f.write('%s wndaction\n'%time_current)
#测试函数,
def test1():
print('test1 starting action')
logger() def test2():
print('test2 starting action')
logger() def test3():
print('test3 starting action')
logger()
#执行顺序
test1()
test2()
test2()

函数的返回值(return):代码执行结果的返回值可以通过返回值体现出代码执行的状态结果是什么样的

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author:wanghui
def test1():
print("in the test1")
return 0 #结束程序,并返回值,不再执行此函数体内的下面部分代码
print('test end')
def test2():
print("in trh test2") def test3():
print("in trh test3")
return 1,'hello',['wanghui','hehehe'],{'name':'wanghui'} #返回值的类型比较多,最终将返回到一个元组中 x = test1()
y = test2()
z = test3()
print(x)

位置参数和关键字调用的使用:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author:wanghui
def test(x,y):
print(x)
print(y)
test(1,2) #这里的1,2是x,y的位置参数,也叫作实参是内存中实际存在的值,而x,y为形参,不会占内存空间
##所有的形参和实参是一一对应的不能多也不能少
test(x=3,y=4) #这是关键字调用的表示方法,要记住关键字调用和位置参数的位置:位置参数要位于关键字调用之前

 默认参数的使用

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author:wanghui
def test(x,y=2):
print(x)
print(y) test(1,3) #调用函数的时候,默认参数是非必传参数,用于默认安装路径等,然后之后的传递相当于是修改默认参数
#默认安装值,以及连接数据库的端口号

  参数组的应用 :

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author:wanghui】
#第一种参数组:接受N个位置参数转换成元组的方式
def test(*args):
print(args) test(2,3,45) #解决实参不固定的情况下就需要使用参数组来解决这个问题(*args),输出为元组
test(*[1,2,34,5,6,432,23]) #结合列表 #第二种参数组
def test1(x,*args):
print(x)
print(args) test(1,2,3,4,56,8,79,0) #可以传递任意的参数值,传多少都可以 #第三种参数组:前俩中都是能转成不同形式(半元组和全元组形式),将N个关键字参数转换成键值对形式存放
#可以接受字典的参数组
def test2(**kwargs):
print(kwargs)
#test2(name="alex",age=8,sex="male") #将N个关键字参数转换成键值对形式存放
test2(**{'name':'wanghui','age':22})
#test2(1,2,3,4,5,6) #不能转成字典形式 #结合位置参数使用
def test3(name,age=23,**kwargs): #默认参数要放到参数组之前,否则会报错
print(name)
print(kwargs)
#test3('wanghui','cdfv','ewwqd') #这样错误
test3('wanghui',gender="male") #结合第一种参数组实验
def test4(name,age=22,*args,**kwargs):
print(name)
print(args)
print(kwargs)
test4('wanghui',age=25,hobby='IT',birthday=1991) #结果会返回一个空的元组,因为后面的关键字参数被转成了字典,由于不存在位置参数,所以元组为空

  局部变量和全局变量:

##局部变量:在子程序中局部变量器作用

# def change_name(name):
# print("\033[31mbefore change :\033[0m",name)
# name = "WANGHUI"
# print("\033[41mafter chang:\033[0m",name)
#
# name ='wanghui'
# change_name(name)
# print(name) ##全局变量
school = "oldboy edu" def change_name(name):
school ="mage edu"
print("before change",name,school)
name = 'WANGHUI'
age =24
print("after change",name) name = "wanghui"
change_name(name)
print(name)
print(school) #保持输出oldboy edu 而mage edu指示函数体内的局部变量,不能被全局变量调用 ##局部变量上位
school = "oldboy edu" def change_name(name):
global school
school ="mage edu"
print("before change",name,school)
name = 'WANGHUI'
age =24
print("after change",name) name = "wanghui"
change_name(name)
print(name)
print(school) #强制改变全局变量,所以mage edu上位成功

  特别注意:

#局部变量里面对于字符串和数字的修改不影响全局变量,然而要是序列类型的话,只要徐改了局部变量里对应的元素则就影响了全局变量
#原因在于:只要能改就行,哈哈哈哈!!

names=['wanghui','chenyibo','liming'] def test():
names[0] = "王辉"
print(names)
test()
print(names)

  递归:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author:wanghui
#递归:要有明确的结束条件;深入递归一次 问题规模要比前一次减少;递归效率不高会导致栈溢出
# def calc(n):
# print(n)
# return calc(n+1) #会打印999次,然后就报错了
# calc(1) def calc(n):
print(n)
if int(n/2) > 0:
return calc(int(n/2))
print(("--->\n",n)) #这里输出1,原因是最后结果除下来为0,所以打印0对应的结果1 calc(10)

  函数式编程:是一种编程范式。它的特点就是允许函数本身作为参数传入另一个函数,还允许返回一个函数。python针对函数式编程不是太全面。学习函数式变成比较好的编程语言有lisp,hashshell,erlang等。

  高阶函数:

    变量可以指向函数,函数的参数能够接收变量,name一个函数就可以接受另一个函数作为参数

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author:wanghui
def add(a,b,f):
return f(a)+f(b)
res = add(3,-6,abs)
print(res)

 今天作业:

程序1: 实现简单的shell sed替换功能

  程序解析:

程序2:修改haproxy配置文件 

 

【python自动化第三篇:python入门进阶】的更多相关文章

  1. 【python自动化第七篇:面向对象进阶】

    知识点概览: 静态方法,类方法,属性方法 类的特殊方法 反射 异常处理 socket开发基础 一.静态方法:@staticmethod 只是名义上归类管理,实际上在静态方法里访问不了类或者实例中的任何 ...

  2. 【python自动化第十一篇】

    [python自动化第十一篇:] 课程简介 gevent协程 select/poll/epoll/异步IO/事件驱动 RabbitMQ队列 上节课回顾 进程: 进程的诞生时为了处理多任务,资源的隔离, ...

  3. 【0728 | 预习】第三篇 Python基础

    第三篇 Python基础预习 Part 1 变量 一.什么是变量? 二.为什么要有变量? 三.定义变量 四.变量的组成 五.变量名的命名规范 六.变量名的两种风格 Part 2 常量 Part 3 P ...

  4. python 历险记(三)— python 的常用文件操作

    目录 前言 文件 什么是文件? 如何在 python 中打开文件? python 文件对象有哪些属性? 如何读文件? read() readline() 如何写文件? 如何操作文件和目录? 强大的 o ...

  5. python数据挖掘第三篇-垃圾短信文本分类

    数据挖掘第三篇-文本分类 文本分类总体上包括8个步骤.数据探索分析->数据抽取->文本预处理->分词->去除停用词->文本向量化表示->分类器->模型评估.重 ...

  6. 图解Python 【第三篇】:Python-函数

    本节内容一览图 一.函数介绍 1.什么是函数 2.定义一个函数 你可以定义一个由自己想要功能的函数,以下是简单的规则: 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 (). 任何传入参 ...

  7. python自动化运维篇

    1-1 Python运维-课程简介及基础 1-2 Python运维-自动化运维脚本编写 2-1 Python自动化运维-Ansible教程-Ansible介绍 2-2 Python自动化运维-Ansi ...

  8. 学习python,第三篇:.pyc是个什么鬼?

    .pyc是个什么鬼? 1. Python是一门解释型语言? 我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存 ...

  9. 第三篇 Python执行方式和变量初始

    第一个Python程序 可以打开notepad或者其他文本编辑器,输入:print("Hello Python!"),将文件保存到任意盘符下,后缀名是  .py 两种python程 ...

随机推荐

  1. ruby环境sass编译中文出现Syntax error: Invalid GBK character错误解决方法

    sass文件编译时候使用ruby环境,无论是界面化的koala工具还是命令行模式的都无法通过,真是令人烦恼. 容易出现中文注释时候无法编译通过,或者出现乱码,找了几天的解决方法终于解决了. 这个问题的 ...

  2. js 不可变的原始值和可变的对象引用

    javascript中的原始值(undefined.null.布尔值.数字和字符串)与对象(包括数组和函数)有着根本区别.原始值是不可更改的:任何方法都无法更改(或“突变”)一个原始值.对数字和布尔值 ...

  3. c语言数组的操作

    #include<stdio.h> #include<malloc.h> #include<stdlib.h>//exit() struct Arr//定义了一个数 ...

  4. c++读文件-对try-throw-catch的应用

    #include<iostream> #include<fstream> #include<stdlib.h> #include<stdio.h> us ...

  5. 小Z的创业经历 谢谢支持

    写这篇文章的目的是跟大家分享下创业的一些想法,经历.希望对你有所帮助或有所思考.  我想用6篇文章介绍下前期创业经历 1.怎么创业了? 2.万事开头难,怎么开始呢? 3.我们的系统详情(上) 4.我们 ...

  6. Android使用Dom解析xml

    一.理论准备                 二.上代码  <?xml version="1.0" encoding="utf-8" ?> < ...

  7. DEEP LEARNING IS THE FUTURE: Q&A WITH NAVEEN RAO OF NERVANA SYSTEMS

    DEEP LEARNING IS THE FUTURE: Q&A WITH NAVEEN RAO OF NERVANA SYSTEMS CME Group was one of several ...

  8. EasyUI datagrid数据表格的函数getData返回来的是什么

    EasyUI datagrid数据表格的函数getData返回来的是什么? 他返回来的是这么一个对象: Object { rows=[10], total=15} 其中rows就是每一行的数据,是这些 ...

  9. 如何配置svn服务器(通过VisualServer服务器)

    如果你已经安装好了VisualServer服务器,现在让我们一起来配置svn服务器吧

  10. CollapsingToolbarLayout

    CollapsingToolbarLayout作用是提供了一个可以折叠的Toolbar,它继承至FrameLayout,给它设置layout_scrollFlags,它可以控制包含在Collapsin ...