一、热身
- 1、输出
>>> print 'I','need','python' 中间加空格不会输出 碰到逗号就输出一个空格
输出 I need python
- 2、输入 raw_input函数,可以让用户输入并存放至变量中
>>> name = raw_input()
Saikikky
直接输出变量name 也可以用print name语句 就可以书出name中保存的内容
>>> name
'Saikikky'
可以输出提示信息
>>> name = raw_input('please enter your name:')
please enter your name:Saikikky
>>> print 'hello,',name
hello, Saikikky
二、语法(缩进方式:四个空格的缩进 python大小写敏感)
- 1、关于字符
\n
表示换行,\t
表示制表符,字符\
本身也要转义,所以\\
表示的字符就是\
Python还允许用r''
表示''
内部的字符串默认不转义
>>> print '\\\t\\'
\ \
>>> print r'\\\t\\'
\\\t\\
如果字符串内部有很多换行,用\n写在一行里不好阅读,为了简化,Python允许用'''...'''的格式表示多行内容
写成程序没有... 下面的代码是在交互命令行里的输入
>>> print '''line1
... line2
... line3'''
line1
line2
line3
- 2、布尔值
Python中的布尔值要区分大小写 True 和 False
可以用and、or和not运算
- 3、空值
空值是Python中 的一个特殊的值,用None表示,不能理解为0
0是有意义的,而None是一个特殊的空值
- 4、字符串
ord()函数和chr()函数,可以按照ASCII编码把字母和对应的数字相互转换
>>> ord('A')
65
>>> chr(65)
'A'
以Unicode表示的字符串用u'...'表示,例如
>>> print u'中文'
中文
>>> u'中'
u'\u4e2d' #\u后面是十六进制的Unicode码
>>> u'A'
u'A'
>>> u'\u0041'
u'A'
将Unicode编码的u'xxx'转为UTF-8编码的'xxx'用encode('utf-8')方法
反过来用decode('utf-8')方法
>>> u'ABC'.encode('utf-8')
'ABC' #英文转换之后值相等但占用存储空间不同
>>> u'中文'.encode('utf-8')
'\xe4\xb8\xad\xe6\x96\x87'
>>> 'abc'.decode('utf-8')
u'abc'
len()函数返回字符串长度
通常在文本文件开头写上
#!/usr/bin/env python
# -*- coding: utf-8 -*-
第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;
第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。
- 5、格式化,与C语言一致,用%实现
>>> 'Hello,%s'%'world'
'Hello,world'
>>> 'Hi, %s, you have $%d.' % ('Saikikky', 100000)
'Hi, Saikikky, you have $100000.'
常见的占位符有:
%d | 整数 |
%f | 浮点数 |
%s | 字符串 |
%x | 十六进制整数 |
%s可以把任何数据类型转换成为字符串 其中%%转义表示%
格式化整数和浮点数还可以指定是否补0和整数与小数的位数:
>>> '%2d-%02d' % (3,1)
' 3-01' #前面有个空白符
>>> '%.2f'%3.1415926
'3.14'
在Python2.X版本中需要'xxx'和u'xxx'两种字符串表示,而Python3.X则统一成了Unicode编码,但以字节形式表示的字符 串要加b前缀,即b'xxx'.
- 6、list
list是一种有序的集合,可以随时添加和删除其中的元素。
list元素索引时有一种特殊的情况,最后一个元素的索引是-1,倒数第二个是-2以此类推
append()函数加到末尾,insert(index, 'xxx')加到指定位置
pop()删除list末尾的元素,删除指定位置用pop(i)
list中元素的数据类型可以不同例如:
>>> L = ['Apple', 123, True]
>>> S = ['Python', 'Java', ['asp', 'php'], 'scheme', L]
>>> S
['Python', 'Java', ['asp', 'php'], 'scheme', ['Apple', 123, True]]
>>> len(S)
5 #注意S的长度只有5 其中两个元素是另外的list
- 7、tuple,与list相似,但一旦初始化就不能修改,这种不能修改指的是每个元素的指向永远不变,list初始化用[],tuple用().
注意只有一个元素的时候要加一个逗号消除歧义,t = (1,),在显示的时候也会加一个逗号。
- 8、条件判断和循环
if,else和elif(类似Java中的else if)
for...in循环,依次把list和tuple中的每个元素迭代出来
range()用于生成一个整数序列,range(5)即生成从0开始并小于5的整数
raw_input()读取的内容永远以字符串的形式返回,整数用int(raw_input())转换
- 9、dict(字典)其他语言中称为map,使用键值对存储, 定义时用{}
>>> d = {'Saikikky':100, 'Bob':95}
>>> d
{'Saikikky': 100, 'Bob': 95}
>>> d['Saikikky']
100
直接用d['Adam'] = 95的方式可以直接添加
可以用in判断key是否存在 ‘Thomas’in d或者采用get方法
>>> d.get('Saikikky')
100
>>> d.get('Thomas') #返回None的时候Python的交互式命令行不显示结果
>>> d.get('Thomas',-1)
-1
删除一个key用pop(key)方法,对应的键值对直接删除
list可变,不能用作dict中的key值,其他不变的例如字符串,整型等都可以用作key
- 10、set(一组key的集合,但不存储value,key值不能重复)即集合,与dict类似不能放入可变对象
可以用add(key)方法添加元素,remove(key)方法删除元素
>>> s = set([1,2,3]) #创建的时候,需要提供一个list作为输入集合
>>> s
set([1, 2, 3])
两个set可以做交并集的操作,例如
>>> s1 = set([1,2,3])
>>> s2 = set([2,3,4])
>>> s1 & s2
set([2, 3])
>>> s1 | s2
set([1, 2, 3, 4])
- 11、不可变和可变对象
对于可变对象,比如list,对list进行操作,list内部的内容是会变化的,比如:
>>> a = ['c', 'b', 'a']
>>> a.sort()
>>> a
['a', 'b', 'c']
而对于不可变对象,比如str,对str进行操作呢:
>>> a = 'abc'
>>> a.replace('a', 'A')
'Abc'
>>> a
'abc'
虽然字符串有个replace()
方法,也确实变出了'Abc'
,但变量a
最后仍是'abc'
,应该怎么理解呢?
我们先把代码改成下面这样:
>>> a = 'abc'
>>> b = a.replace('a', 'A')
>>> b
'Abc'
>>> a
'abc'
要始终牢记的是,a
是变量,而'abc'
才是字符串对象!有些时候,我们经常说,对象a
的内容是'abc'
,但其实是指,a
本身是一个变量,它指向的对象的内容才是'abc'
:
当我们调用a.replace('a', 'A')
时,实际上调用方法replace
是作用在字符串对象'abc'
上的,而这个方法虽然名字叫replace
,但却没有改变字符串'abc'
的内容。相反,replace
方法创建了一个新字符串'Abc'
并返回,如果我们用变量b
指向该新字符串,就容易理解了,变量a
仍指向原有的字符串'abc'
,但变量b
却指向新字符串'Abc'
了:
所以,对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的。