前言
Python是一种计算机编程语言。
计算机要根据编程语言执行任务,就必须保证编程语言写出的程序不能有歧义,故任何编程语言都有自己的一套语法,编译器或解释器就是负责把符合语法的程序代码转换成CPU能够执行的机器码,然后执行。
Python的语法采用缩进方式,写出的代码像下面的样子:
#print absolute value of an integer:
a = 100
if a >= 0
print(a)
else:
print(-a)
以#开头的语句是注释。其他每一行都是一个语句,当语句以冒号:结尾时,缩进的语句视为代码块。
Python使用缩进来组织代码块,坚持使用4个空格的好习惯。另外,务必注意的地方是Python是大小写敏感的,像SQL语句则不区分大小写。
Python的输入输出
输出
用print()在括号中加上字符串,就可以向屏幕上输出指定的文字。比如输出’hello,world’,用代码实现如下
>>>print('hello,world')
print()函数可以输出多个字符串,用逗号“,”隔开,就可以连成一串输出:
>>>print('The quick brown fox','jumps over','the lazy dog')
The quick brown fox jumps over the lazy dog
print()函数会一次打印每个字符,遇到逗号”,”会输出成空格;
print()也可以打印整数,或者计算结果:
>>>print('100+200=',100+200)
100+200=300
注意,对于100+200,Python解释器会计算出结果300,但是'100+200='是字符串而非数学公式,Python把其视为公式,print()函数便会依次打印出每个字符。
输入
Python提供了一个input()函数,可以让用户输入字符串,并存到变量中。比如放一个用户名:
>>>name=input()
mojian
当你输入name=input()并按下回车时,Python交互器就等着用户输入了。输入任意内容后,按下回车完成输入。输入完成后,什么都不会提示,Python交互器又回到>>>状态了。用户刚输入的内容其实存放到name变量里了。可以直接输入name查看变量内容:
>>>name
'mojian'
可以利用输入输出函数把打印的hello,world改善成一个小程序了:
name=input('please enter your name:')
print('hello',name)
再次运行This程序时,会首先打印please enter your name:
,这时用户就可以根据这个提示输入名字,得到hello,xxx的输出:
C:workspace>python hello.py
please enter your name:mojian
hello,mojian
数据类型和变量
在python中能直接处理的数据类型有以下几种:
整数
浮点数
Python的浮点数没有大小限制,但是超出一定范围就直接表示为inf(无限大)。
字符串
字符串是以单引号'或双引号"括起来的任意文本。如果'本身也是一种字符串,那么可以用""括起来,如果字符串内部包含两者,可以用转义符来标识,如:
'I'm "OK"!'
表示的字符串内容是I’m “OK”!
转义字符可以转义很多字符,比如n可以表示换行,t表示制表符,字符本身也要转义,所以表示的字符就是。
Python还允许用r''表示''内部的字符串默认不转义,还能用'''...'''的格式表示多行内容。当然'''...'''前面还可以加r使用。
布尔值
在Python中可以直接用True、False表示一个布尔值(注意大小写),布尔值可以用and、or、not运算。
and运算是 与运算 ,只有所有都为True时,运算结果才是True;
or运算是 或运算,只要其中一个为True,运算结果就是True;
not运算是 非运算,它是一个单目运算,把True变成False,把False变成True。
布尔值经常用在条件判断中,如:
if age >= 18:
print('adult')
else:
print('teenager')
空值
空值是Python中一个特殊的值,用None表示。None不能理解为0,因为0是有意义的。
变量
在计算机程序中,变量不仅可以是数字,还可以是任意数据类型。
变量在程序中就是用一个变量名表示,变量名必须是大小写英文、数字、和_的组合,且不能以数字开头。
在Python中,等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量。
请不要把赋值语句的等号等同于数学的符号,如:
x = 10
x = x+2
在数学上,x=x+2是不成立的,但是在程序中,赋值语句先计算右侧的表达式x+2,得到结果12,再赋给变量x。
理解变量在计算机内存中的表示也很重要,当我们赋值一个变量a = 'ABC'时,Python干了两件事:
1.在内存中创建了一个ABC的字符串;
2.在内存中创建了一个名为a的变量,并把它指向ABC。
常量
常量就是不能改变的量,通常用全部大写的变量名表示常量。
在Python中,有两种除法:
一种除法是/,其计算结果是浮点数,即使是整除,结果也是浮点数:
>>>9 / 3
3.0
另一种除法是//,称为地板除,两个整数的除法仍然是整数:
>>>10 / 3
3
Python还提供一个余数运算,可以得到两个整数相除的余数:
>>>10 % 3
1
综合练习
题:请打印出以下变量的值:
n = 123
f = 456.789
s1 = 'Hello,world'
s2 = 'Hello,'Adam''
s3 = r'Hello,"Bart"'
s4 = r'''Hello,
Lisa!'''
不唯一答案:
>>>print('''n = 123
f = 456.789
s1 = 'Hello,'Adam''
s3 = 'Hello,
Lisa!''''''
)
字符串和编码
字符编码
最早美国制定的编码表是ASCII,包括大小写英文字母、数字和一些符号;
中国制定了GB2312编码,用来把中文编进去…
各国有各国的标准,就不可避免地产生冲突——乱码。
因此,Unicode把所有语言都统一到一套编码中,避免乱码的问题。
ASCII和Unicode的区别:ASCII编码是一个字节,Unicode编码通常是两个字节。
如果统一成Unicode编码,写的基本上全是英文的话,那么用Unicode编码比ASCII编码要多一倍的储存空间,所以出现了把Unicode编码转换为“可变长编码”的UTF-8编码。
现在计算机系统通用的字符编码工作方式:
1.在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。
2.用记事本编辑时,从文件读取的UTF-8字符转换为Unicode字符到内存中,编辑完成后,保存时再把Unicode转换为UTF-8保存到文件:
3.浏览网页时,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器:
Python的字符串
在Python3版本中,字符串使用Unicode编码。
对于单个字符的编码,Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符:
>>>ord('中')
20013
>>>chr('20013')
'中'
如果知道字符的整数编码,还可以用十六进制这么写str(两种写法完全是等价的):
>>>'u4e2du6587'
'中文'
因为Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需把str变为以字节为单位的bytes。
Python对bytes类型的数据用带b前缀的单引号或双引号表示:
x = b'ABC'
以Unicode表示的str通过encode()方法可以编码为指定的bytes,如:
>>>'ABC'.encode('ascii')
b'ABC'
>>>'中文'encode('UTF-8')
b'xe4xb8xadxe6x96x87'
如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法:
>>>b'ABC'.decode('ascii')
'ABC'
>>>b'xe4xb8xadxe6x96x87'.decode('utf-8')
'中文'
要计算str包含多少个字符,可以用len()函数:
>>>len('ABC')
3
>>>len('中文')
2
如果换成bytes,len()函数就计算字节数:
>>>len(b'ABC')
3
>>>len('中文'.encode('utf-8'))
6
操作字符串时,应坚持使用UTF-8编码对str和bytes进行转换。
当Python解释器读取源代码时,为让它按UTF-8编码读取,我们通常在文件开头加上:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
另需确保文本编辑器正在使用UTF-8 without BOM编码。
格式化
在Python中,采用的格式化方式和C语言是一致的,用%实现,如:
>>>'Hello,%s' % 'world'
'Hello,world'
>>>'Hi,%s,you have $%d.' %('mojian',100000)
'Hi,mojian,you have $100000.'
%运算符是用来格式化字符串的,在字符串内部,%s表示用字符串替换,%d表示用整数替换,有几个占位符%?,后面就跟几个变量或者值,顺序要对应。若只有一个占位符,括号可以省略。
格式化整数和浮点数%f还可以指定是否补0和整数与小数的位数:
>>>'%2d-%02d' % (3,1)
' 3-01'
>>>'%.2f' %3.1415926
'3.14'
如果%只是普通字符,用%%来转义表示%。
使用list和tuple
list
list是一种有序的集合,可以随时添加和删除其中的元素。
变量classmates就是一个list。
>>>classmates = [‘mojian’,’Bob’,’Tracy’]
>>>classmates
[‘mojian’,’Tracy’]
用len()函数可以获得list元素的个数:
>>>len(classmates)
3
用索引来访问list中每一个位置的元素,记得索引是从0开始的,确保索引不越界,最后一个索引是len(classmates) -1.
如果要获取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素:
>>>classmates[-1]
’Tracy’
可以向list中追加元素至末尾:
>>>classmates.append(‘Adam’)
>>>classmates
[‘mojian’,’Tracy’,’Adam’]
也可以把元素插入到指定位置,比如索引号为1的位置:
>>>classmates[1,’Jack’]
>>>classmates
[‘mojian’,’Jack’,’Adam’]
要删除末尾的元素,使用pop()方法,pop(i)是删除指定位置元素的方法:
>>>classmates.pop()
‘Adam’
>>>classmates.pop(1)
>>>classmates
[‘mojian’,’Tracy’]
要把某个元素替换成别的元素,可以直接赋值给对应的索引位置:
>>>classmates[1] = ‘Susan’
>>>>classmates
[‘mojian’,’Suan’,’Tracy’]
list中的元素类型可以不同,也可以是另外一个list,如:
>>>L = [‘A’,123,False,[‘java’,’ruby']]
>>>len(L)
4
注意L只有4个元素,其中L(3)是一个list,可以拆开写:
>>>s = [‘java’,’ruby’]
>>>L = [‘A’,s]
要拿到java可以写s[1]或者L[3][1]
如果一个list中一个元素也没有,就是一个空的list,其长度为0.
tuple
tuple和list非常相似,但是tuple一初始化就不能修改。因为其不可变,相比list更安全。
>>>classmates = (‘mojian’,’Jack’)
它不能使用.append(),insert()这样的方法,其他获取元素的方法和list是一样的:classmates[0],classmates[-1],但不能赋值为其他元素。
tuple的陷阱:当定义一个元素的时候,必须加一个逗号’,’,来消除歧义:
>>>t = (1,)
>>>t
(1,)
‘可变的’tuple:
>>>t = (‘a’,’b’,[‘A’,’B’])
>>>t[2][0] = ‘X’
>>>t[2][1] = ‘Y’
>>>t
(‘a’,[‘X’,’Y’])
条件判断
**
elif是else if的缩写,完全可以有多个elif,所以if语句的完整形式就是:
if <条件判断1>:
<执行1>
elif <条件判断2>:
<执行2>
elif <条件判断3>:
<执行3>
else:
<执行4>
If语句是从上往下判断,如果在某个判断是True,把该判断语句执行后,就忽略剩下的elif和else.
If 判断语句还可以简写,比如:
>>>if x:
print(’True’)
只要x是非零数值、非空字符集、非空list等,就判断为True,否则为False。
input
可以用input()读取用户的输入,但是input()返回的数据类型是str,str不能直接和整数或者小数比较,必须先把str转换成整数或者小数,python提供了int()函数和float()函数来完成:
s = input(‘birth:’)
birth = int(s)
if birth < 2000:
print(‘00前’)
else:
print(‘00后’)
循环
Python循环有两种,一种是for...in循环,依次把list或tuple中的每个元素迭代出来,如:
nemes = ['mojian','Bob','Jack']
for name in names:
print(name)
执行这段会依次打印出names中的每个元素,所以for x in ...循环就是把每个元素代入变量x,然后执行缩进块的语句。
如果计算1-100的整数之和,Python提供了range()函数,range(101)就可以生成0-100的整数序列,计算如下:
sum = 0
for x in range(101):
sum = sum + x
print(sum)
第二种循环是while循环,只要条件满足,就不断循环,条件不满足时退出循环。
用while循环实现100以内的奇数之和:
sum = 0
n=99
while n > 0:
sum = sum +n
n = n-2
print(sum)
实践:
利用循环依次对list中的每个名字打印出Hello,xxx!
for循环:
# -*- coding: utf-8 -*-
L = ['Bart','Lisa','Adam']
for s in L:
print('Hello,',s,'!')
while循环:
# -*- coding: utf-8 -*-
L = ['Bart','Adam']
p = 0
while p < 3 :
print('Hello,%s!' %L[p])
p = p + 1
break
在循环中,break语句可以提前退出循环,如:
n = 1
while n <= 100:
if n >10: #当n=11时,条件满足,执行break语句
break #break语句会结束当前循环
print(n)
n = n + 1
print('END')
continue
在循环过程中,可以通过continue语句跳过当前的这次循环,直接开始下次循环。
如用continue打印1-10的奇书:
n = 0
while n < 10:
n = n + 1
if n % 2 == 0: #如果n是偶然,执行continue语句
continue #continue语句会直接继续下一轮循环
print(n)
break语句和continue语句通常必须和if语句使用。如果滥用这两个语句,会造成代码执行逻辑分叉过多。
当代码写成死循环时,利用Ctrl+C退出程序。
使用dict和set
dict
python内置了字典:dict的支持,使用键-值(key-value)储存,具有极快的查找速度。
用python写一个dict如下:
>>>d = {‘mojian’: 95,’Bob’: 75,’Tracy’: 85}
>>>d[‘mojian’]
95
把数据放入dict的方法,除了初始化时指定外,还可以通过key放入:
>>>d[‘Adam’] = 60
>>>d[‘Adam’]
60
由于一个key只能对应一个值,所以多次对一个key放入value时,后面的值会把前面的值冲掉。
如果key不存在,dict就会报错,要避免key不存在的错误,有两种方法。
一个是通过in判断key是否存在:
>>>’Tom’ in d
False
二是通过dict提供的get方法,如果key不存在,可以返回None,或者自己指定的value:
>>>d.get(’Tom’)
>>>d.get(’Tom’,-1)
-1
PS:返回None时,Python交互式命令行不显示结果。
要删除一个key时,可以用pop(key)方法,对应的value值也会从dict中删除:
>>>d.pop(‘Bob’)
75
>>>d
{‘mojian’: 95,’Tracy’: 85}
注意:dict内部存放key的顺序和放入key的顺序无关。
与list的特点相反,dict的特点有:
1.查找和插入的速度极快,不会随着key的增加而变慢;
2.占用大量的内存,内存浪费多。
正确使用dict需牢记一点:dict的key必须是 不可变对象。
在python中,字符串、整数等都是不可变的,但是list是可变的,所以就不能作为key。
set
set和dict类似,也是一组key的集合,但不储存value,也没有重复的key。
要创建一个set,需要提供一个list作为输入集合:
>>>s =set ([1,2,3])
>>>s
{1,3}
显示的{1, 2, 3}只是告诉我们这个set中有三个元素,显示的顺序也不表示set是有序的。
重复元素在set中会被自动过滤:
>>>s = set([1,1,3,4}
,通过set.add(key)方法可以添加元素到set中,可重复添加但不会有效果。
>>>s.add(4)
>>>s.add(4)
>>>s
{1,4}
通过remove(key)方法可以删除元素:
>>>s.remove(4)
>>>s
{1,3}
set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:
>>>s1 = set([1,3])
>>>s2 = set([2,4])
>>>s1 & s2
{2,3}
>>>s1 | s2
{1,4}
set和dict的唯一区别在于没储存对应的value。
set同样不可以放入可变对象,因为不能判断两个对象是否相等,这样就不能保证内部无重复元素。
不可变对象
对于可变对象,比如list,对list进行操作,list的内容会发生改变,如:
>>>a = [‘c’,‘b’,‘a’]
>>>a.sort()
>>>a
[‘a’,’c']
对于不可变对象,比如str,对str进行操作,str的内容不会变化,如:
>>>a = ‘abc’
>>>a.replace(‘a’,‘A’)
‘Abc’
>>>a
‘abc’
对于不变对象来说,调用对象本身的任意方法,都不会改变自身的内容,这些方法会创建新的对象返回,这样就保证了不可变对象本身永远是不可变的。
阅读全文
版权声明:本文为博主原创文章,未经博主允许不得转载。
本文已收录于以下专栏:
相关文章推荐
Python学习笔记:02 基础:变量、整数、字符串、赋值、基本输出、注释、代码块
字符串赋值
# String value assignment
myStr = "hello"
print "String variable 'myStr'" +
',which...
rex_xia
2014年02月12日 20:48
1886
个人python101学习笔记02
2015年08月26日 17:13
42.59MB
下载
Python学习笔记——socket通信相关资源文件
2017年07月18日 17:10
24KB
下载
兄弟连学python(02)—— 基础笔记整理
兄弟连学python(02)—— 基础笔记整理
# 注释的作用:增加可读性,排查程序错误
# 两种 :# 或''' 或 """
# Ctrl + / 快捷键,快速用单行注释注释多行
# 注释混...
wat_wao
2017年12月11日 09:33
38
python基础学习笔记(1)
2017年05月20日 15:30
1.76MB
下载
Spark (Python版) 零基础学习笔记(一)—— 快速入门
由于Scala才刚刚开始学习,还是对python更为熟悉,因此在这记录一下自己的学习过程,主要内容来自于spark的官方帮助文档,这一节的地址为:
点击打开链接
文章主要是翻译了文档的内容,但也在里...
zhangyang10d
2016年11月12日 06:20
2543
Python学习笔记(1)——基础知识
Python菜鸟一枚,本篇属于基础入门,主要是笔记整理,并加入自己的实践经验。参考过的所有资料见后。在这里感谢各位大神的慷慨分享和细致解析。简单介绍版本与平台。Python版本2.7.11,集成开发环...
hweiyi
2016年03月24日 16:34
220
python基础教程_学习笔记13:标准库:一些最爱——sys
标准库:一些最爱
sys
sys这个模块让你能够访问与python解释器联系紧密的变量和函数。
sys模块中一些重要的函数和变量
函数/变量 描述
argv 命令行参数,包括脚本名称
e...
signjing
2014年06月23日 14:54
3215
Python学习笔记——基础
输出
print ( ) 或者是 print 后面直接加要输出的东西。常量字符串的话要加引号:print ("hello") 或者 print "hello"
输出中文而不报错
在Pycha...
u011121046
2016年07月05日 21:49
177
Python学习笔记(二)——基础语法
交互式编程交互式编程不需要创建脚本文件,是通过 Python 解释器的交互模式进来编写代码。
下划线以单下划线开头 _foo 的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用 from...
gowhere_
2017年07月05日 15:52
87
精彩评论