一:起因
(1)说起学习Python的原因,上一篇blog已经提到过了;Python掐指一算不过是自己接触过的第四门大型语言(从接触到现在已经2周了)c/c++ ,Java,MATLAB(PS:应该还不算入门,只会简单的应用),之后就是python了。
(2)c/c++ 到java的过渡是非常短暂的,但是过渡到MATLA就非常的不顺利(PS:就是上一篇的blog提到过的,从内心里抵触一门未曾谋面的语言),当时就已经感受到了开启一门新语言阻力非常大(有时可以用可遇不可求来形容)。
(3)从java到python中间,大概有两三年的时间没有学习新的语言,一直再巩固数据结构 和 算法的基础东西,和C++的STL,以及JavaWeb编程等等,总之是没有接触过新的语言,可想而知接受新事物阻力有多大(ps:自己的思想得有多么落伍);当然,也正是由于长时间突然接触一门新语言,对于如何快速掌握一门语言,自己也有自己的一点感触。
(4)思想和观念的转变 —— 感触分享
乐于善于接受新鲜事物,对新知识充满渴求的欲望;
多交朋友,你可能会做到一门技术一门语言的大牛,你不可能门门精通,互相学习;
参见技术交流群 和 技术blog和社区,之后自己再钻研官方的API
开启一门新技术的策略:1)从一个感兴趣的点入手(培养兴趣),运行一些小示例;2)1-2天简单的过一下基本的语言(可以不变代码);3)1-2天开始把教程里面的一些小程序,自己手动敲一遍;4)2-3天把此语言的数据类型以及包装类型的(类似STL)的方法应用一下,调试一下;5)高级进阶以及高级应用;6)总结,总结贯穿始终。
二:详解
(1)列表(Lists)
1)序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。
2)Python有6个序列的内置类型,但最常见的是列表和元组。序列都可以进行的操作包括索引,切片,加,乘,检查成员。此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法。列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。列表的数据项不需要具有相同的类型创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示:
list1 = ['physics', 'chemistry', 1997, 2000]; list2 = [1, 2, 3, 4, 5 ]; list3 = ["a", "b", "c", "d"]; #与字符串的索引一样,列表索引从0开始。列表可以进行截取、组合等。
3)list
1-- 使用下标索引来访问列表中的值,同样你也可以使用方括号的形式截取字符,如下所示:list[1:5],截取;list[[:-1];(2)元组 方法与list基本相同
Python的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号,列表使用方括号。
元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。如下实例:
tup1 = ('physics', 'chemistry', 1997, 2000); tup2 = (1, 2, 3, 4, 5 ); tup3 = "a", "b", "c", "d";
(3)string字符串
字符串是 Python 中最常用的数据类型。我们可以使用引号来创建字符串。创建字符串很简单,只要为变量分配一个值即可
1)Python转义字符在需要在字符中使用特殊字符时,python用反斜杠(\)转义字符。如下表:
\(在行尾时) 续行符
\\ 反斜杠符号
\' 单引号
\" 双引号
\n 换行
2)Python字符串运算符
+ 字符串连接a + b 输出结果: HelloPython
* 重复输出字符串a*2 输出结果:HelloHello
[] 通过索引获取字符串中字符a[1] 输出结果 e
[ : ] 截取字符串中的一部分a[1:4] 输出结果 ell
in 成员运算符 - 如果字符串中包含给定的字符返回 TrueH in a 输出结果 1
not in 成员运算符 - 如果字符串中不包含给定的字符返回 TrueM not in a 输出结果 1
r/R 原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。 原始字符串除在字符串的第一个引号前加上字母"r"(可以大小写)以外,与普通字符串有着几乎完全相同的语法。print r'\n' prints \n 和 print R'\n' prints \n
% 格式字符串 请看下一章节
3)三引号
python三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符。三引号的语法是一对连续的单引号或者双引号(通常都是成对的用)。三引号让程序员从引号和特殊字符串的泥潭里面解脱出来,自始至终保持一小块字符串的格式是所谓的WYSIWYG(所见即所得)格式的。
一个典型的用例是,当你需要一块HTML或者SQL时,这时用字符串组合,特殊字符串转义将会非常的繁琐。
errHTML = ''' <HTML><HEAD><TITLE> Friends CGI Demo</TITLE></HEAD> <BODY><H3>ERROR</H3> <B>%s</B><P> <FORM><INPUT TYPE=button VALUE=Back ONCLICK="window.history.back()"></FORM> </BODY></HTML> ''' cursor.execute(''' CREATE TABLE users ( login VARCHAR(8), uid INTEGER, prid INTEGER) ''')4)python的字符串内建函数
字符串方法是从python1.6到2.0慢慢加进来的——它们也被加到了Jython中。
这些方法实现了string模块的大部分方法,如下表所示列出了目前字符串内建支持的方法,所有的方法都包含了对Unicode的支持,有一些甚至是专门用于Unicode的。
方法 描述
string.center(width)返回一个原字符串居中,并使用空格填充至长度 width 的新字符串
string.count(str, beg=0, end=len(string))返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数
string.decode(encoding='UTF-8', errors='strict')以 encoding 指定的编码格式解码 string,如果出错默认报一个 ValueError 的 异 常 , 除 非 errors 指 定 的 是 'ignore' 或 者'replace'
string.encode(encoding='UTF-8', errors='strict')以 encoding 指定的编码格式编码 string,如果出错默认报一个ValueError 的异常,除非 errors 指定的是'ignore'或者'replace'
string.find(str, beg=0, end=len(string))检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1
string.index(str, beg=0, end=len(string))跟find()方法一样,只不过如果str不在 string中会报一个异常.
string.isspace()如果 string 中只包含空格,则返回 True,否则返回 False.
string.lower()转换 string 中所有大写字符为小写.
string.lstrip()截掉 string 左边的空格
string.partition(str)有点像 find()和 split()的结合体,从 str 出现的第一个位置起,把 字 符 串 string 分 成 一 个 3 元 素 的 元 组 (string_pre_str,str,string_post_str),如果 string 中不包含str 则 string_pre_str == string.
string.replace(str1, str2, num=string.count(str1))把 string 中的 str1 替换成 str2,如果 num 指定,则替换不超过 num 次.
string.rfind(str, beg=0,end=len(string) )类似于 find()函数,不过是从右边开始查找.
string.rpartition(str)类似于 partition()函数,不过是从右边开始查找.
string.rstrip()删除 string 字符串末尾的空格.
string.split(str="", num=string.count(str))以 str 为分隔符切片 string,如果 num有指定值,则仅分隔 num 个子字符串.
string.strip([obj])在 string 上执行 lstrip()和 rstrip()
(4)Python 字典(Dictionary)
字典是另一种可变容器模型,且可存储任意类型对象,如其他容器模型。字典由键和对应值成对组成。字典也被称作关联数组或哈希表。基本语法如下:
dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
每个键与值用冒号隔开(:),每对用逗号分割,整体放在花括号中({})。键必须独一无二,但值则不必。值可以取任何数据类型,但必须是不可变的,如字符串,数或元组。
1)删除字典元素 能删单一的元素也能清空字典,清空只需一项操作。
显示删除一个字典用del命令,如下实例:
#coding=utf-8 #!/usr/bin/python dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}; del dict['Name']; # 删除键是'Name'的条目 dict.clear(); # 清空词典所有条目 del dict ; # 删除词典 print "dict['Age']: ", dict['Age']; print "dict['School']: ", dict['School'];
10 radiansdict.values() 以列表返回字典中的所有值
5)Python 日期和时间
Python程序能用很多方式处理日期和时间。转换日期格式是一个常见的例行琐事。Python有一个time and calendar模组可以帮忙。
Python附带的受欢迎的time模块下有很多函数可以转换常见日期格式。如函数time.time()用ticks计时单位返回从12:00am, January 1, 1970(epoch) 开始的记录的当前操作系统时间, 如下实例:
上述也就是struct_time元组。这种结构具有如下属性:
序号 属性 值
0 tm_year 2008
1 tm_mon 1 到 12
2 tm_mday 1 到 31
3 tm_hour 0 到 23
4 tm_min 0 到 59
5 tm_sec 0 到 61 (60或61 是闰秒)
6 tm_wday 0到6 (0是周一)
7 tm_yday 1 到 366(儒略历)
8 tm_isdst -1, 0, 1, -1是决定是否为夏令时的旗帜
Time模块
Time模块包含了以下内置函数,既有时间处理相的,也有转换时间格式的:
序号 函数及描述
1 time.altzone
返回格林威治西部的夏令时地区的偏移秒数。如果该地区在格林威治东部会返回负值(如西欧,包括英国)。对夏令时启用地区才能使用。
2 time.asctime([tupletime])
接受时间元组并返回一个可读的形式为"Tue Dec 11 18:07:14 2008"(2008年12月11日 周二18时07分14秒)的24个字符的字符串。
3 time.clock( ) 用以浮点数计算的秒数返回当前的CPU时间。用来衡量不同程序的耗时,比time.time()更有用。
4 time.ctime([secs]) 作用相当于asctime(localtime(secs)),未给参数相当于asctime()
6 time.localtime([secs]) 接收时间辍(1970纪元后经过的浮点秒数)并返回当地时间下的时间元组t(t.tm_isdst可取0或1,取决于当地当时是不是夏令时)。
7 time.mktime(tupletime) 接受时间元组并返回时间辍(1970纪元后经过的浮点秒数)。
8 time.sleep(secs) 推迟调用线程的运行,secs指秒数。
9 time.strftime(fmt[,tupletime]) 接收以时间元组,并返回以可读字符串表示的当地时间,格式由fmt决定。
10 time.strptime(str,fmt='%a %b %d %H:%M:%S %Y') 根据fmt的格式把一个时间字符串解析为时间元组。
11 time.time( ) 返回当前时间的时间戳(1970纪元后经过的浮点秒数)。
12 time.tzset() 根据环境变量TZ重新初始化时间相关设置。
日历(Calendar)模块 此模块的函数都是日历相关的,例如打印某月的字符月历。
星期一是默认的每周第一天,星期天是默认的最后一天。更改设置需调用calendar.setfirstweekday()函数。
模块包含了以下内置函数:
序号 函数及描述
1 calendar.calendar(year,w=2,l=1,c=6)返回一个多行字符串格式的year年年历,3个月一行,间隔距离为c。 每日宽度间隔为w字符。每行长度为21* W+18+2* C。l是每星期行数。
3 calendar.isleap(year) 是闰年返回True,否则为false。
4 calendar.leapdays(y1,y2) 返回在Y1,Y2两年之间的闰年总数。
5 calendar.month(year,month,w=2,l=1)返回一个多行字符串格式的year年month月日历,两行标题,一周一行。每日宽度间隔为w字符。每行的长度为7* w+6。l是每星期的行数。
6 calendar.monthcalendar(year,month)返回一个整数的单层嵌套列表。每个子列表装载代表一个星期的整数。Year年month月外的日期都设为;范围内的日子都由该月第几日表示,从1开始。
7 calendar.monthrange(year,month)返回两个整数。第一个是该月的星期几的日期码,第二个是该月的日期码。日从0(星期一)到6(星期日);月从1到12。
10 calendar.setfirstweekday(weekday) 设置每周的起始日期码。0(星期一)到6(星期日)。
12 calendar.weekday(year,month,day) 返回给定日期的日期码。0(星期一)到6(星期日)。月份为 1(一月) 到 12(12月)。
在Python中,其他处理日期和时间的模块还有:datetime模块 pytz模块 dateutil模块
(0)目录
快速学Python 和 易犯错误(文本处理)
Python文本处理和Java/C比对
十分钟学会Python的基本类型
快速学会Python(实战)
大数据处理之道(十分钟学会Python)