Python常用知识点汇总

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

一.Python中的数据结构

python的元组、列表、字典数据类型是很python(there python is a adjective)的数据结构。这些结构都是经过足够优化后的,所以如果使用好的话,在某些area会有很大的益处。

1.元组

个人认为就像java的数组,python中的元组有以下特性:

任意对象的有序集合,这条没啥说的,数组的同性;

通过偏移读取;

一旦生成,不可改变;

固定长度,支持嵌套

来例子吧,python 代码

>>> (0, 'haha', (4j, 'y'))   ###元组用圆括号标志

(0, 'haha', (4j, 'y'))  

>>> t = (1, 3, 'b')  

>>> t[2]  

'b'  

>>> t[3]   

Traceback (most recent call last):     File "#41>", line 1, in <module></module>       t[3]   IndexError: tuple index out of range 

>>> t[-1]  

'b'  

>>> t[0:-1]  

(1, 3)  

>>> t * 2   ##这里是元组内的对象都重复两次,而不是每个对象值乘以2

(1, 3, 'b', 1, 3, 'b')

>>> for x in t:      

       print x,           

1 3 b  

>>> 'b' in t  

True 

>>> q = t + ((3, 'abc'))   ##也可以写成:q = t + (3,’abc’)

>>> q  

(1, 3, 'b', 3, 'abc')  

>>> for x in (2, (3, 'a')):  ##嵌套的元组遍历,输出时被嵌套的元组作为一个对象输出

print x           

2   (3, 'a')  

>>> len(q)  

5  

>>> len((2, (3, 'abc')))   ##注意嵌套元组的长度

2  

>>> (1, 2, 3)[1]  

2  

>>> q[1] = 'd'    

Traceback (most recent call last):     File "#57>", line 1, in <module></module>       q[1] = 'd'   TypeError: 'tuple' object does not support item assignment  

>>> a = ('b', 'c', q)  

>>> 1 in a   ###判断元组中是否有某个值

False 

>>> q in a  

True 

>>> a = ('b', 'c', (1, 3, 'b', 3, 'abc')) 

>>> a  

('b', 'c', (1, 3, 'b', 3, 'abc')) 

上面的例子足以说明大部分了,使用元组时最重要的一点是“一旦生成,就不可变了”。

 

2.列表

列表所具有的特性也要比元组更多、更灵活,其character总结如下:

任意对象的有序集合;

可通过偏移存取,注意,列表中的元素都是可变的,这是不同于元组的;

长度可变,支持嵌套;

还有一些类似java的对象引用机制

由于列表的这些特性,使得列表在实际应用中被广泛使用,下面是一些例子。

1)首先是基本用法

python 代码

>>> l = ['a', 'b', 'c'] 

>>> len(l)   3  

>>> l + ['d']   ['a', 'b', 'c', 'd']  

>>> l * 2   ['a', 'b', 'c', 'a', 'b', 'c']  

>>> for x in l:      

print x,          a b c 

2)索引和分片,赋值(单个元素赋值,分片赋值

python 代码

>>> l = ['abc', 'def', 'ghi', 123]        

>>> l[2]         'ghi'        

>>> l[-3]         'def'       

>>> l[:3]         ['abc', 'def', 'ghi']     

>>> l[1] = 'haha'    

>>> l      ['abc', 'haha', 'ghi', 123]   

>>> l[1:] = ['apple', 'banana']     

>>> l      ['abc', 'apple', 'banana']     

>>> l[2] = [123, 345, 456]     

>>> l      ['abc', 'apple', [123, 345, 456]]   

>>> l[1:] = [123, 234, 345, 456, 567]     

>>> l      ['abc', 123, 234, 345, 456, 567] 

3) 添加、排序、删除操作

python 代码

>>> l = ['abc', 'def', 'ghi', 123] 

>>> l.append(456)  

>>> l   ['abc', 'def', 'ghi', 123, 456]  

>>> l.sort()  

>>> l   [123, 456, 'abc', 'def', 'ghi']  

>>> del l[0]  

>>> l   [456, 'abc', 'def', 'ghi']  

>>> del l[2:]  

>>> l   [456, 'abc'] 

4)一些有趣的用法

去掉列表中每个元素头尾的空格:## str.strip() 函数使用

python 代码

>>> freshfruit = [' banana', ' loganberry ', 'passion fruit ']  

>>> [str.strip() for str in freshfruit]    ['banana', 'loganberry', 'passion fruit'] 

把列表中,大于3的元素,乘以2:

python 代码

>>> vec = [2, 4, 6]   

>>> [2*x for x in vec if x > 3]    [8, 12] 

把列表1的每一个元素和列表2的每一个元素相乘:

python 代码

>>> lst1 = [2, 4, 6]   

>>> lst2 = [4, 3, -9]  

>>> [x*y for x in lst1 for y in lst2]    [8, 6, -18, 16, 12, -36, 24, 18, -54] 

取获[0-10)的平方:

python 代码

[x**2 for x in range(10)] 

3.字典

python里的字典就像java里的HashMap,以键值对的方式存在并操作,其特点如下:

通过键来存取,而非偏移量;

键值对是无序的;

键和值可以是任意对象;

长度可变,任意嵌套;

在字典里,不能再有序列操作,虽然字典在某些方面与列表类似,但不要把列表套在字典上。

字典的键必须是不可改变的类型,如:字符串,数字,tuple(元组);值可以为任何Python数据类型。

1)基本操作

python 代码

>>> table = {'abc':1, 'def':2, 'ghi':3}  

>>> table['abc']   1 

>>> len(table)   3  

>>> table.keys()   ['abc', 'ghi', 'def']  

>>> table.values()   [1, 3, 2]  

>>> table.has_key('def')   True

>>> table.items()   [('abc', 1), ('ghi', 3), ('def', 2)] 

2)修改,删除,添加

python 代码

>>> table = {'abc':1, 'def':2, 'ghi':3}  

>>> table['ghi'] = ('g', 'h', 'i') 

>>> table   {'abc': 1, 'ghi': ('g', 'h', 'i'), 'def': 2} 

>>> del table['abc'] 

>>> table   {'ghi': ('g', 'h', 'i'), 'def': 2}  

>>> table['xyz'] = ['x', 'y', 'z']   ##另一种添加方法>>> dict1.setdefault('b',2)

>>> table   {'xyz': ['x', 'y', 'z'], 'ghi': ('g', 'h', 'i'), 'def': 2} 

#清空字典

>>> dict1.clear() 

>>> dict1 #字典变为空了

{} 

#删除字典对象

>>> del dict1 

>>> dict1 

Traceback (most recent call last): 

File "< interactive input>", line 1, in < module>

NameError: name 'dict1' is not defined

在这里需要来一句,对于字典的扩充,只需定义一个新的键值对即可,而对于列表,就只能用append方法或分片赋值。

3)对字典的遍历

python 代码

>>> table = {'abc':1, 'def':2, 'ghi':3}  

>>> for key in table.keys():      

print key, '\t', table[key]            abc     1   ghi     3   def     2 

二.文件读写

与java的File类相比,python的文件类要狭义一些

1) 文件写

python 代码

>>> myfile = open('myfile', 'w')    ##另外一种写法myfile=file(‘myfile’,’w’)

>>> myfile.write('hello world\n')  

>>> myfile.close() 

python的一个open语句就打开了一个文件(当给定的文件不存在时,会自动建立一个新的文件)。open的第一个参数是文件名,第二个参数是操作模式,所谓操作模式就是你打开一个文件是用来干什么的,是读,还是写 (当然操作模式不仅只有读和写)。还有一件事,操作完要记得关。

2 文件读

python 代码

>>> myfile = open('myfile', 'r')  ##另外一种写法myfile=file(‘myfile’,’r’)

>>> myfile.readline ()   'hello world\n' 

很是简单,这样两句就顶java一长串的流嵌套,当然,java那样做也是有道理的。

三.Python中使用pickle持久化对象

Python中可以使用 pickle 模块将对象转化为文件保存在磁盘上,在需要的时候再读取并还原。具体用法如下: 
pickle.dump(obj, file[, protocol])

这是将对象持久化的方法,参数的含义分别为:

n obj: 要持久化保存的对象;

n file: 一个拥有 write() 方法的对象,并且这个 write() 方法能接收一个字符串作为参数。这个对象可以是一个以写模式打开的文件对象或者一个StringIO对象,或者其他自定义的满足条件的对象。

n protocol: 这是一个可选的参数,默认为0,如果设置为 1 或 True,则以高压缩的二进制格式保存持久化后的对象,否则以ASCII格式保存。

对象被持久化后怎么还原呢?pickle 模块也提供了相应的方法,如下: 
pickle.load(file) 
只有一个参数 file ,对应于上面 dump方法中的 file 参数。这个 file 必须是一个拥有能接收一个整数为参数的 read() 方法以及一个不接收任何参数的 readline() 方法,并且这两个方法的返回值都应该是字符串。这可以是一个打开为读的文件对象、StringIO 对象或其他任何满足条件的对象。 
下面是一个基本的用例:

# -*- coding: utf-8 -*- 
import pickle 
# 也可以这样: import cPickle as pickle 
obj = {"a": 1, "b": 2, "c": 3} 
# 将 obj 持久化保存到文件 tmp.txt 中 
pickle.dump(obj, open("tmp.txt", "w"))

#filename=file(‘tmp.txt’,’w’)

#pickle.dump(obj,filename)

# do something else ... 
# 从 tmp.txt 中读取并恢复 obj 对象 
obj2 = pickle.load(open("tmp.txt", "r"))

#filename=file(‘tmp.txt’,’r’)

#pickle.load(filename) 
print obj2

不过实际应用中,我们可能还会有一些改进,比如用 cPickle 来代替 pickle ,前者是后者的一个 C 语言实现版本,拥有更快的速度,另外,有时在 dump 时也会将第三个参数设为 True 以提高压缩比。

四.Python连接操作MySQL数据库

MySQLdb在Python中也就相当于JAVA中MySQL的JDBC Driver,Python也有类似的数据接口规范Python DB API,MySQLdb就是Mysql的实现。操作也比较简单和其它平台或语言操作数据库一样,就是建立和数据库系统的连接,然后给数据库输入SQL,再从数据库获取结果。

1.下载MySql-python:

http://cdnetworks-kr-1.dl.sourceforge.net/project/mysql-python/mysql-python/1.2.3/MySQL-python-1.2.3.tar.gz ,

2.解压、编译和安装

Shell> tar -zxvf MySQL-python-1.2.3.tar.gz

Shell> cd MySQL-python-1.2.3

Shell> python setup.py build #编译

   Shell> python setup.py install #安装

注:

如果在执行编译操作python setup.py build时报如下错误:

rom setuptools import setup 
ImportError: No module named setuptools

解决方法:

1)wget -q http://peak.telecommunity.com/dist/ez_setup.py

2)python ez_setup.py ( 这一步必然失败,是为了第三步取得url准备的.)

运行这行的时候,linux会停留在Downling ~~~~~这类似的上面.

这是因为你的这个目录下中没有setuptools-0.6c8-py2.4.egg东西.

3)wget http://pypi.python.org/packages/2.4/s/setuptools/setuptools-0.6c8-py2.4.egg

注意:第三步的url是根据第二步得到的url.

这时候你再运行第二步.之后再运行安装你前面不能够安装的软件.应该就解决了setuptools方面的问题了.

关键东西:是要准备好2个东西:ez_setup.py和setuptools-0.6c8-py2.4.egg.

3.测试

Shell> python

>>> import MySQLdb

如果没有出错提示,刚安装成功

4.Python连接MySQL操作示例:

Shell>cat mysqldb.py

#!/usr/bin/python

import MySQLdb #导入模块,注意大小写!!

#建立和数据库的连接

conn=MySQLdb.connect(host='localhost',user='root',passwd='root',db='test')

#host:Mysql主机地址或名称 
#user:连接使用的用户名 
#passwd:连接使用的用户名密码 
#db:默认打开的数据库

#获取操作游标

cursor=conn.cursor()

#执行SQL

cursor.execute('select * from tab4')

#获得SQL执行返回结果集的第一条记录

row1=cursor.fetchone()

print ‘the first records is:’,row1

#获取5条记录,注意由于之前执行有了fetchone(),所以游标已经指到第二条记录了,也就是从第二条开始的所有记录 
print "只获取5条记录:"  
results = cursor.fetchmany(5)   
for r in results:   
    print r  

#重置游标位置,0,为偏移量,mode=absolute | relative,默认为relative, 

cursor.scroll(0,mode='absolute') 

#当使用fetchone()方法是,指针是会发生移动的。所以,若不重置指针,那么使用fetchall

#的信息将只会包含指针后面的行内容。 
#实际上,我觉得应该尽量避免移动指针;而应从select语句得到全部结果后,交给python处理比较方便,但我们应该明白该指针的含义。

#获得SQL执行返回的所有结果集,该结果集是以元组数据结构存放,第一条为row[0]

rows=cursor.fetchall()

print ‘the first records is:’,rows[0]

print 'the results of tab4 is:',rows

#用for循环打印结果集

for row in rows:

print row

#关闭连接,释放资源

cursor.close()

conn.close()

执行该脚本:

Shell> ./mysqldb.py

mysql server version: ((1L, 'sam', 1L), (2L, 'sam2', 2L), (3L, 'sam3', 3L), (4L, 'sam4', 4L))

5.Python对MySQL的数据库其他操作

Python在MySQL中创建数据库newdb,创建数据库表newtab,并向newtab中插入一条、多条记录

Shell>cat newdb.py

#!/usr/bin/python

import MySQLdb   
#建立和数据库系统的连接 
conn = MySQLdb.connect(host='localhost', user='root',passwd='longforfreedom')   
#获取操作游标 
cursor = conn.cursor()   
#执行SQL,创建一个数据库.   
cursor.execute("create database if not exists python")   
#选择数据库 
conn.select_db('python');   
#执行SQL,创建一个数据表.   
cursor.execute("create table test(id int, info varchar(100)) ")   
value = [1,"inserted "];   
#插入一条记录 
cursor.execute("insert into test values(%s,%s)",value);   
values=[]   
#生成插入参数值 
for i in range(20):   
values.append((i,'Hello mysqldb, I am recoder ' + str(i)))   
#插入多条记录 
cursor.executemany("insert into test values(%s,%s) ",values);  

count = cursor.execute('select * from test')   
print '总共有 %s 条记录',count 

#获取一条记录,每条记录做为一个元组返回 
print "只获取一条记录:"  
result = cursor.fetchone();   
print result   
#print 'ID: %s   info: %s' % (result[0],result[1])   
print 'ID: %s   info: %s' % result    
#关闭连接,释放资源 
cursor.close();

conn.close();




本文转自 yubowei 51CTO博客,原文链接:http://blog.51cto.com/samyubw/625206

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
Python
python知识点
【8月更文挑战第27天】python知识点
35 1
WK
|
2月前
|
存储 机器学习/深度学习 JSON
Python入门知识点
Python入门覆盖历史、设计理念、变量、数据类型、控制结构等。了解Python的发展,掌握动态类型的灵活性,熟悉整数、浮点数、字符串等数据类型。学会if/else、for/while循环构建逻辑流程,使用def定义函数,lambda快速创建匿名函数。通过类实现面向对象编程,利用模块和包组织代码。掌握try-except处理异常,open()进行文件操作。利用标准库和第三方库增强功能,理解集合、字典、列表推导式的应用,深入魔法方法、递归、装饰器等高级特性,以及上下文管理器和字符串、列表、元组的操作技巧。
WK
27 0
|
10天前
|
Python
python之基础知识点
python之基础知识点
19 3
|
4月前
|
存储 Python 容器
Python新手入门,这些基础知识点你掌握了吗?
【6月更文挑战第12天】Python是新手友好的编程语言,具备解释型、面向对象、动态类型和跨平台特性。基础知识包括:变量(如整数、浮点数、字符串、列表、元组、字典和集合),运算符与控制流(如条件语句和循环),以及函数的定义与调用。要精通Python,还需学习更多如面向对象编程、模块、文件操作等内容。开始你的Python学习之旅吧!
32 0
|
23天前
|
监控 Python Windows
python知识点100篇系列-pysnooper用于调试
PySnooper是一个便捷的Python调试工具,用于监控代码执行过程及局部变量的变化,替代繁琐的打印语句。作为GitHub上的热门开源项目,它通过装饰器自动记录代码执行细节。安装简便,支持多种平台,可通过pip安装。使用时,只需在目标函数上添加装饰器即可实时查看变量变化或将其记录至日志文件。此外,还支持使用with块对特定代码段进行调试。更多详细信息可参阅其官方使用文档。
python知识点100篇系列-pysnooper用于调试
|
2月前
|
存储 Python
Python时间模块四大必备知识点
Python时间模块四大必备知识点
43 4
Python时间模块四大必备知识点
|
2月前
|
Unix 开发者 iOS开发
开发知识点-Python-virtualenv
`virtualenv`通过其简易性、灵活性与高度的可配置性,成为Python开发中推荐的环境隔离工具之一。随着Python生态的发展,类似的工具如 `venv`(Python 3.3+自带的轻量级环境构建工具)和 `pipenv`(提供更复杂的依赖管理功能)也越来越受欢迎,但 `virtualenv`仍保持着重要的地位,尤其是在需要维护旧项目或者系统没有提供最新工具的情况下。
32 1
|
3月前
|
缓存 网络协议 Linux
Linux、Python、计算机网络中的常见知识点
Linux、Python、计算机网络中的常见知识点
|
3月前
|
算法 Java Linux
python中的面试常考知识点
python中的面试常考知识点
|
4月前
|
数据采集 机器学习/深度学习 数据挖掘
python运用知识点说明
Python涵盖广泛,从基础语法(变量、数据类型、字符串操作)到高级特性(装饰器、迭代器、闭包)。常用库包括NumPy, Pandas(数据处理),Scikit-learn, TensorFlow(机器学习),Django, Flask(Web开发),Scrapy(网络爬虫)。应用于Web开发、数据分析、系统运维、游戏开发和网络爬虫。Python历经1.x、2.x到3.x版本,3.x引入重大更新,强调Unicode和函数打印等,与2.x不兼容。掌握这些能提升开发效率。【6月更文挑战第4天】
47 2
下一篇
无影云桌面