Python学习之初接触

记录一些学习Python的时候的一些基础知识,都是很浅的知识点。

Python学习初接触
关于中文编码问题
Python的默认编码格式为ASCII的,在没有修改编码格式的时候是无法打印汉字的,所以在读取中文的时候会出现如下错误

  File "test.py", line 2
SyntaxError: Non-ASCII character '\xe4' in file test.py on line 2, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

解决方法为在文件开头加上 # -*- coding: UTF-8 -*- 或者 #coding=utf-8就行了。

注意:在Pythone3.X源码文件中已经默认使用UTF-8编码,所以可以正常解析汉字,不需要再指定UTF-8编码了。

Python标示符
  • 在python里,标示符有字母数字下划线三种
  • 在python中,所有的标示符可以包括英文、数字以及下划线,但是不能以数字开头
  • python中的标示符是区分大小写的
  • 以下划线开头的标示符是有特殊含义的,
    • 以单下划线开头(_foo)的标示符辨识不能直接访问的的类属性,需要通过类提供的接口进行访问,
    • 而以双下划线(__foo)开头的标示符表示类的私有成员
    • 以双下划线开头和结尾代表python里特殊方法专用的标示,如__init__()代表类的构造函数

Python语言的最大的特别之处就是代码块的控制范围不是使用{},而是使用缩进来决定代码块的逻辑范围。所以这里就有一个问题需要注意了:制表符(tab)、空格(space)切记不能混用

Python语言一般以新行作为语句的结束符,但是也可以使用“\”将一行语句分为多行显示。

Python语言接收单引号(’)、双引号(“)、三引号(’’’、”“”)来表示字符串,但是引号的开始与结束要使用相同的类型。其中三引号可以多行组成,编写多行文本的时候可以当做快捷语法来使用。

Python的空格,函数之间或者类方法之间使用空格进行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空格进行分隔,以突出函数入口的开始。空行和代码缩进是不一样的,并不是Python语法的一部分,但是它是代码的一部分。

Python语言可以在同一行中使用多条语句,语句之间使用分好(;)进行分隔

Python中的变量
变量存储在内存中的值,和其他语言一样在创建变量的时候就在内存中开辟一段内存来存放变量,基于变量的数据类型,解释器会分配指定的内存,并决定什么数据可以被存储在内存中。因此,变量可以指定不同的数据类型,这些变量可以存储整数、小数或者字符。

变量的类型不需要声明,在对变量进行赋值的时候就是变量声明和定义的过程,因此每个变量在使用前都必须要进行赋值。

对变量的赋值可以使用多变量赋值
a = b = c = 1     这里需要注意的是将三个变量分配到相同的内存空间上。
a, b, c = 1, 2, "john"

Python中有五种标准的数据类型:
  • Number(数字)
  • String(字符串)
  • List(列表)
  • Tuple(元组)
  • Dictionary(字典)

Number数据类型
Number数据类型是不可以改变的数据类型,意味着改变数字数据类型就会分配一个新的对象。当指定一个值时,Number对象就会被创建,可以使用del进行删除对象。

Python支持有四种不同的类型:
  • int(有符号整型)
  • long(长整型)
  • float(浮点型)
  • complex(复数)

String数据类型
字符串一般是由数字、字母、下划线组成的一串字符。字符串列表有两种取值顺序:
  • 从左到右索引默认0开始,最大范围是字符串长度减一
  • 从右到左索引默认-1开始,最大范围是字符串开头
获取字符串的子字符串方法是 string[index_header:index_footer]
需要注意的是当使用冒号分割的字符串,左边的包含了下边界,右边的不包含上边界,举个栗子,
s = 'ilovepython' 
s[1:5]的结果是love

具体栗子:
str = "1234567890"
print "整个字符串】" + str
print "第一个字符:1】" + str[0]
print "第三个字符到第五个字符之间:345】" + str[2:5]
print "第三个字符之后所有:34567890】" + str[2:]
print "第三个字符之前的所有:12】" + str[:2]
print "输出两遍】" + str * 2
print "添加一个yes】" + str + "Yes"


List数据类型
列表可以完成大多数集合类的数据结构实现,支持字符、数字、字符串甚至包含列表,使用[]标识。
和字符串类似的取值操作类似,不再举例。

Tuple数据类型
元组类似于List,但是使用()标识,内部使用逗号隔开,但是元组不能够二次赋值,相当于是自读列表。

Dictionary数据类型
字典是无序的对象集合,通过键值对的方式进行存储,使用{}进行标识。

具体栗子:
dict = {}
dict["one"] = "Number one"
dict[1] = "Change before"

print dict[1]
#Change before
print dict["one]
#Number one

dict[1] = "Change after"
dict[2] = "Add one obj"
print dict[1]
#Change after
print dict
#{1: 'Change after', 2: 'Add one obj', 'one': 'Number one'}

print dict.keys()
#返回的是一个List [1, 2, 'one']
print dict.values()
#返回的是一个List ['Change after', 'Add one obj', 'Number one']


Python的运算符
在Python中支持的运算符有:
  • 算数运算符
  • 比较运算符
  • 赋值运算符
  • 逻辑运算符
  • 位运算符
  • 成员运算符
  • 身份运算符
  • 运算符优先级

算数运算符
基本的算数运算符,和其他的语言中的一样,加减乘数、取余数、取整数、幂(**):

以下假设变量a为10,变量b为20:

运算符 描述 实例
+ 加 - 两个对象相加 a + b 输出结果 30
- 减 - 得到负数或是一个数减去另一个数 a - b 输出结果 -10
* 乘 - 两个数相乘或是返回一个被重复若干次的字符串 a * b 输出结果 200
/ 除 - x除以y b / a 输出结果 2
% 取模 - 返回除法的余数 b % a 输出结果 0
** 幂 - 返回x的y次幂 a**b 为10的20次方, 输出结果 100000000000000000000
// 取整除 - 返回商的整数部分 9//2 输出结果 4 , 9.0//2.0 输出结果 4.0

举个栗子
number_a = 5
number_b = 2
number_c = 0

number_c = number_a + number_b
print number_a,"+",number_b,"=",number_c

number_c = number_b - number_a
print number_b,"-",number_a,"=",number_c

number_c = number_a / number_b
print number_a,"/",number_b,"=",number_c

number_c = number_a * number_b
print number_a,"*",number_b,"=",number_c

number_c = number_a % number_b
print number_a,"%",number_b,"=",number_c

number_c = number_a ** number_b
print number_a,"**",number_b,"=",number_c

number_c = number_a // number_b
print number_a,"//",number_b,"=",number_c

5 + 2 = 7
2 - 5 = -3
5 / 2 = 2
5 * 2 = 10
5 % 2 = 1
5 ** 2 = 25
5 // 2 = 2


比较运算符
比较运算符看图就明白的,

以下假设变量a为10,变量b为20:

运算符 描述 实例
== 等于 - 比较对象是否相等 (a == b) 返回 False。 
!= 不等于 - 比较两个对象是否不相等 (a != b) 返回 true. 
<> 不等于 - 比较两个对象是否不相等 (a <> b) 返回 true。这个运算符类似 != 。
> 大于 - 返回x是否大于y (a > b) 返回 False。
< 小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。 (a < b) 返回 true。 
>= 大于等于 - 返回x是否大于等于y。 (a >= b) 返回 False。
<= 小于等于 - 返回x是否小于等于y。
(a <= b) 返回 true。 


赋值运算符
还是看图明白,

以下假设变量a为10,变量b为20:

运算符 描述 实例
= 简单的赋值运算符 c = a + b 将 a + b 的运算结果赋值为 c
+= 加法赋值运算符 c += a 等效于 c = c + a
-= 减法赋值运算符 c -= a 等效于 c = c - a
*= 乘法赋值运算符 c *= a 等效于 c = c * a
/= 除法赋值运算符 c /= a 等效于 c = c / a
%= 取模赋值运算符 c %= a 等效于 c = c % a
**= 幂赋值运算符 c **= a 等效于 c = c ** a
//= 取整除赋值运算符 c //= a 等效于 c = c // a


逻辑运算符
还是看图吧,不同关于已知道的语言中的||或者&&,Python中使用的是and、or和not

Python语言支持逻辑运算符,以下假设变量a为10,变量b为20:

运算符 描述 实例
and 布尔"与" - 如果x为False,x and y返回False,否则它返回y的计算值。 (a and b) 返回 true。
or 布尔"或" - 如果x是True,它返回True,否则它返回y的计算值。 (a or b) 返回 true。
not 布尔"非" - 如果x为True,返回False。如果x为False,它返回True。 not(a and b) 返回 false。 


成员运算符
这个算是比较新的运算符了,用来测试实例中是否包含一系列成员,包括字符串、列表和元组。
运算符 描述 实例
in 如果在指定的序列中找到值返回True,否则返回False。 x 在 y序列中 , 如果x在y序列中返回True。
not in 如果在指定的序列中没有找到值返回True,否则返回False。 x 不在 y序列中 , 如果x不在y序列中返回True。


身份运算符
身份运算符也是一个比较新的运算符,用于比较两个对象的存储单元是否相同。
运算符 描述 实例
is is是判断两个标识符是不是引用自一个对象 x is y, 如果 id(x) 等于 id(y) , is 返回结果 1
is not is not是判断两个标识符是不是引用自不同对象 x is not y, 如果 id(x) 不等于 id(y). is not 返回结果 1 


Python语言中的条件语句
和其他语言的基本类似,有if-else控制语句,但是没有switch控制语句,如果需要使用switch的功能可以使用if-else进行。



Python中的时间

myTime = time.time() #这样获得的是时间戳
print myTime

>>1445439379.14

localtime = time.localtime(myTime) #获得当前时间,从返回的时间戳浮点数的时间方式转换成时间元组
print "Local current time :", localtime

>>Local current time : time.struct_time(tm_year=2015, tm_mon=10, tm_mday=21, tm_hour=22, tm_min=56, tm_sec=19, tm_wday=2, tm_yday=294, tm_isdst=0)


formmertTime = time.asctime(localtime) #获取格式化的时间
print formmertTime

>>Wed Oct 21 22:56:19 2015

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()
5 time.gmtime([secs])
接收时间辍(1970纪元后经过的浮点秒数)并返回格林威治天文时间下的时间元组t。注:t.tm_isdst始终为0
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模块
获取某一个月的日历
这个需要import calendar
举个例子,

cal = calendar.month(2015,10)
print "Here is the calendar"
print cal

>>Here is the calendar
    October 2015
Mo Tu We Th Fr Sa Su
          1  2  3  4
 5  6  7  8  9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31


日历模块包含如下一些函数可以进行日历的读取序号

函数及描述
1 calendar.calendar(year,w=2,l=1,c=6)
返回一个多行字符串格式的year年年历,3个月一行,间隔距离为c。 每日宽度间隔为w字符。每行长度为21* W+18+2* C。l是每星期行数。
2 calendar.firstweekday( )
返回当前每周起始日期的设置。默认情况下,首次载入caendar模块时返回0,即星期一。
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月外的日期都设为0;范围内的日子都由该月第几日表示,从1开始。
7 calendar.monthrange(year,month)
返回两个整数。第一个是该月的星期几的日期码,第二个是该月的日期码。日从0(星期一)到6(星期日);月从1到12。
8 calendar.prcal(year,w=2,l=1,c=6)
相当于 print calendar.calendar(year,w,l,c).
9 calendar.prmonth(year,month,w=2,l=1)
相当于 print calendar.calendar(year,w,l,c)。
10 calendar.setfirstweekday(weekday)
设置每周的起始日期码。0(星期一)到6(星期日)。
11 calendar.timegm(tupletime)
和time.gmtime相反:接受一个时间元组形式,返回该时刻的时间辍(1970纪元后经过的浮点秒数)。
12 calendar.weekday(year,month,day)
返回给定日期的日期码。0(星期一)到6(星期日)。月份为 1(一月) 到 12(12月)。


RUNOOB