那些年被我坑过的Python【转】

原文:http://www.cnblogs.com/tntxyz/p/5762371.html

集合类型:

  集合类型中的元素是唯一的!

集合的定义与赋值:

1 set_1 = set([1, 3, 5, 7, 2])
2 set_2 = set([2, 4, 6, 8, 3])

集合的运算操作

 1 # 交集
 2 print(set_1.intersection(set_2))
 3 # 并集
 4 print(set_1.union(set_2))
 5 # 差集
 6 print(set_1.difference(set_2))
 7 # 互相差的并集
 8 print(set_1.symmetric_difference(set_2))
 9 # 无交集判定
10 print(set_1.isdisjoint(set([9,11])))
11 # 子集判定
12 print(set([1,3]).issubset(set_1))
13 # 父集判定
14 print(set_1.issuperset(set([1,3])))

集合的增删改查:

 1 # 交集
 2 print(set_1.intersection(set_2))
 3 # 并集
 4 print(set_1.union(set_2))
 5 # 差集
 6 print(set_1.difference(set_2))
 7 # 互相差的并集
 8 print(set_1.symmetric_difference(set_2))
 9 # 无交集判定
10 print(set_1.isdisjoint(set([9,11])))
11 # 子集判定
12 print(set([1,3]).issubset(set_1))
13 # 父集判定
14 print(set_1.issuperset(set([1,3])))
15
16 # 增加元素:
17 # 如果元素已经存在则不做任何改变
18 set_1.add(3)
19 print(set_1)
20
21 # 更改更新:
22 # 合并并更新
23 set_1.update(set_2)
24 # 将计算后的结果更新到原集合
25 set_1.difference_update(set_2)
26 set_1.intersection_update(set_2)
27 set_1.symmetric_difference_update(set_2)
28 print(set_1)
29
30 # 删除元素:
31 # 如果不存在也不报错
32 set_1.discard(9)
33 # 元素不存在时会报错,对比discard()
34 set_1.remove()
35 # 随机删除一个元素
36 set_1.pop()
37 # 清空集合内元素
38 set_1.clear()

文件的操作

os.path 模块中的路径名访问函数

分隔

basename() 去掉目录路径, 返回文件名

dirname() 去掉文件名, 返回目录路径

join() 将分离的各部分组合成一个路径名

split() 返回(dirname(), basename()) 元组

splitdrive() 返回(drivename, pathname) 元组

splitext() 返回(filename文件名, extension后缀) 元组

信息

getatime() 返回最近访问时间

getctime() 返回文件创建时间

getmtime() 返回最近文件修改时间

getsize() 返回文件大小(以字节为单位)

查询

exists() 指定路径(文件或目录)是否存在

isabs() 指定路径是否为绝对路径

isdir() 指定路径是否存在且为一个目录

isfile() 指定路径是否存在且为一个文件

islink() 指定路径是否存在且为一个符号链接

ismount() 指定路径是否存在且为一个挂载点

samefile() 两个路径名是否指向同个文件

os.path.isdir(name):判断name是不是一个目录,name不是目录就返回false

os.path.isfile(name):判断name是不是一个文件,不存在name也返回false

os.path.exists(name):判断是否存在文件或目录name

os.path.getsize(name):获得文件大小,如果name是目录返回0L

os.path.abspath(name):获得绝对路径

os.path.normpath(path):规范path字符串形式

os.path.split(name):分割文件名与目录(事实上,如果你完全使用目录,它也会将最后一个目录作为文件名而分离,同时它不会判断文件或目录是否存在)

os.path.splitext():分离文件名与扩展名

os.path.join(path,name):连接目录与文件名或目录

os.path.basename(path):返回文件名

os.path.dirname(path):返回文件路径

os模块中的文件操作:

1.重命名:os.rename(old, new)

2.删除:os.remove(file)

3.列出目录下的文件:os.listdir(path)

4.获取当前工作目录:os.getcwd()

文件的内置方法:

SN 方法以描述
1
file.close()

关闭文件。一个关闭的文件无法读取或写入任何东西。

2
file.flush()

刷新内部缓存,像标准输入fflush。这可能是一些类文件对象的一个空操作。

3
file.fileno()

返回所使用的底层实现,从操作系统I/O操作的整数文件描述符。

4
file.isatty()

如果文件被连接到一个tty(状)装置则返回True,否则返回False。

5
next(file)

返回每次被调用时文件中的下一行。

6
file.read([size])

从文件读取大小最多字节(或更少,如果它们获得大小字节之前读取命中EOF)。

7
file.readline([size])

从文件中读取一整行。结尾的换行符保持的字符串中。

8
file.readlines([sizehint])

读取直到EOF使用 ReadLine()并返回一个包含行的列表。如果可选sizehint参数存在,而不是读取到EOF,全行共计约sizehint字节(四舍五入到内部缓冲区大小后可能)被读取。

9
file.seek(offset[, whence])

设置该文件的当前位置

10
file.tell()

返回文件的当前位置

11
file.truncate([size])

截断文件的大小。 如果size参数存在,则文件被截断为(至多)该尺寸。

12
file.write(str)

将一个字符串写入该文件。没有返回值。

13
file.writelines(sequence)

写入字符串序列到文件。该序列可以是一个迭代对象的字符串 - 典型字符串列表。

打开文件:

# 不需要关闭文件,对文件的操作全部在子代码块中完成即可
with open() as f:
# 下面这种方式需要显式的关闭文件才行
f = open()
f.close()

打开文件的模式有:

  • r,只读模式(默认)。
  • w,只写模式。【不可读;不存在则创建;存在则删除内容;】
  • a,追加模式。【可读;   不存在则创建;存在则只追加内容;】

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

  • r+,可读写文件。【可读;可写;可追加】
  • w+,写读
  • a+,同a

"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)

  • rU
  • r+U

"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)

  • rb
  • wb
  • ab

读文本文件:

1 #后两个参数是默认的,可以不加
2 input = open(‘data‘, ‘r‘,encoding=‘utf-8‘)

读二进制文件:

1 input = open(‘data‘, ‘rb‘) 

读取所有文件内容:

1 # 直接使用 in 获取文件中的行即可
2 for line in f:
3      print(line.strip())

读每行 :

file_object.readlines()  #不推荐,因为这需要将全部文件内容加载到内存中,如果文件特别大的时候对性能影响很大!

读取固定字节 :

1 open(‘abinfile‘, ‘rb‘).read(100)

函数的定义:

1 # 通过def和()定义函数,()中为函数的参数,定义函数式的参数为形式参数
2 # foo为函数的逻辑代码块
3 # return bar 中的bar为函数的返回值
4 def func(argument1,argument2...):
5      foo
6      return bar

函数的参数,实参与形参:

  如上所述形参就是函数定义时候()中定义的参数名称,而实参是指函数调用时候使用的,实际传入的参数。

函数的位置参数、关键字参数和不固定参数:

  调用函数传入参数的时候,如果不指定关键字,默认是按参数定义的顺序依次传入,这种方式传入的参数称为位置参数;

1 func(1,‘xiaoming‘)

  调用函数时可以根据形参名称使用=将值传入,这种方式称为关键字参数;

1 func(id=1,name=‘xiaoming‘)

  不固定参数有两种分别是可传入列表的等价于位置参数的*args,定义形参的时候增加一个*args参数用来接收不固定数量的参数,便于函数的扩展。

1 def func(name,*args):
2     foo
3
4 func(name=‘abc‘,*[1,2,3,4])

  第二种是使用**kwargs来标识,可以接收字典类型的输入,等价于不固定个数的关键词参数的使用。当然这两种方式在函数调用的时候也是需要使用*或者**进行标识。

1 def func(**kwargs)
2
3 func(**{‘id‘:1,‘name‘:‘xiaoming‘})

  实参传入的原则:关键字参数不可以在位置参数之前,不固定参数在最后。

函数的返回值:

  函数的返回值是区别于过程是编程的一个典型特点,返回值的作用可以是返回函数的状态,可以返回函数的处理结果,还可以调用其他的函数,当然执行return代表着函数全过程的结束。

1 def func(a,b):
2     if foo:
3         return a
4     else:
5         return b

高阶函数:

   1、变量可以指向函数;

2、函数的返回值可以是函数;

3、一个函数可以接收另一个函数作为参数;

1 def func(a,b,f):
2     return f(a)+f(b)

递归特性:

  1、 必须有一个明确的结束条件

  2、 每次进入更深一层递归时,问题规模相比上次递归都应有所减少

  3、 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

变量的作用域:

  变量可以分为全局变量和局部变量,全局变量的定义是在函数外,或者使用global 关键词来标识一个变量。

  顾名思义全局变量的作用域是全局,即当前py文件中变量定义位置之后的任何位置,都可以引用这个变量。

  局部变量是指尽在局部生效的变量,比如函数中定义的变量尽在函数内部有效(global标识的除外),这与shell中的变量有很大不同,shell中的变量都是全局变量,函数中如果要标识局部变量还需要使用关键词local,确实很不一样。

函数式编程:

  简单说,"函数式编程"是一种"编程范式"(programming paradigm),也就是如何编写程序的方法论。

  它属于"结构化编程"的一种,主要思想是把运算过程尽量写成一系列嵌套的函数调用。

时间: 2024-07-28 13:56:12

那些年被我坑过的Python【转】的相关文章

关于python+django的又一坑,请python班的同学进来看

事情是这样的. 在使用django1.6+的时候,默认会吧session存放在数据库django_session表里. 如果要把session放在内存中,就应该在settings.py 中配置 SESSION_ENGINE = "django.contrib.sessions.backends.cache" 使用的时候: 新增:request.session["userName"] = "Tom" 查询:name = request.sessio

廖雪峰js教程笔记6 generator一个坑 看完python在回来填坑

generator(生成器)是ES6标准引入的新的数据类型.一个generator看上去像一个函数,但可以返回多次. ES6定义generator标准的哥们借鉴了Python的generator的概念和语法,如果你对Python的generator很熟悉,那么ES6的generator就是小菜一碟了.如果你对Python还不熟,赶快恶补Python教程!. 我们先复习函数的概念.一个函数是一段完整的代码,调用一个函数就是传入参数,然后返回结果: function foo(x) { return

那些年被我坑过的Python——道阻且长(第五章实用模块讲解)

random模块 我的随机验证吗程序: 首先保证了字母和数字出现的概率是50% VS 50%,其次是可以订制输出多少位 1 def Captcha(size): 2 Captcha_list = [] 3 for i in range(size): 4 rand_num = random.randint(1, 2) 5 if rand_num == 1: 6 Captcha_list.append(chr(random.randint(65, 90))) 7 elif rand_num == 2

那些年被我坑过的Python——山外有山(第四章)

装饰器: 定义: 本质是函数,(装饰其他函数)就是为其他函数添加附加功能原则: 1.不能修改被装饰的函数的源代码 2.不能修改被装饰的函数的调用方式 优点: 装饰器带来的最直观的好处:减少对函数的细化修改,批量增加新功能. 实现装饰器必备知识:1.函数即“变量” 函数的原理与变量引用相似,都是将一个命名于内存对象进行映射2.高阶函数 满足下列两个条件之一的则为高阶函数: a.把一个函数名当作实参传递给另一个函数(在不修改被装饰函数代码的情况下为它增加功能) b.一个函数返回值中包含另一个函数名(

那些年被我坑过的Python——第十三章:一夫当关(设计堡垒机)

  堡垒机架构 堡垒机的主要作用权限控制和用户行为审计,堡垒机就像一个城堡的大门,城堡里的所有建筑就是你不同的业务系统 , 每个想进入城堡的人都必须经过城堡大门并经过大门守卫的授权,每个进入城堡的人必须且只能严格按守卫的分配进入指定的建筑,且每个建筑物还有自己的权限访 问控制,不同级别的人可以到建筑物里不同楼层的访问级别也是不一样的.还有就是,每个进入城堡的人的所有行为和足迹都会被严格的监控和纪录下来,一旦发生 犯罪事件,城堡管理人员就可以通过这些监控纪录来追踪责任人. 堡垒要想成功完全记到他的

那些年被我坑过的Python——第十章Broker(rabbitMQ/redis)

基于RabbitMQ的direct任务驱动异步RPC程序实现: RPC_dispatcher指令分发器: 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 __Author__ = "Zhang Xuyao" 4 5 import pika 6 import uuid 7 import time 8 import threading 9 10 11 class RpcDispatcher(object): 12 def __init_

[踩坑] Django "OverflowError: Python int too large to convert to C long" 错误

转自:https://blog.csdn.net/June7_/article/details/99991680 问题描述 使用Django框架,在使用model操作数据库的时候,出现 Django "OverflowError: Python int too large to convert to C long" 错误. 以下参照https://blog.csdn.net/June7_/article/details/99991680 解决该问题. 注意:该错误出现原因不仅是mode

python基础之列表的坑

#列表的坑之一 list1 = ['python','java','php','c','c++','c#','ruby'] #将索引为奇数的元素删除 ['java','c','c#'] list2 = [] for item in list1: if list1.index(item) % 2 != 1: list2.pop(list1.index(item)) print(list1) # ['python', 'php', 'c', 'c#', 'ruby'] #这是因为列表用pop之后,后

无铭你也会Python了啊

Hello Python 初识python是在一个steam群组里,当时群里的好多大佬都是计算机专业之类的,什么Jquery java c c# c++ html,当然也有"py语言",当时大一的我一脸羡慕地看着大佬们在他们讨论代码之类的话题自己只能默默窥屏, 但是(But后圈重点)现在我也入门编程的坑了,python给我的第一感觉就是简洁好用,之前C语言的基础没打好现在可以从头再来了,越来越觉得计算机语言有趣起来了. 编程这种技术无论是用什么语言给我的感觉就是计算机用法的正确打开方式