Meoo

Python的基础——Python学习笔记02

Meoo http://www.meoo.net 2017-12-13 20:02 出处:网络 编辑:@iCMS
前言 Python是一种计算机编程语言。 计算机要根据编程语言执行任务,就必须保证编程语言写出的程序不能有歧义,故任何编程语言都有自己的一套语法,编译器或解释器就是负责把符合语法的程序代码转换成CPU能够执行的

前言

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保存到文件:


Python的基础——Python学习笔记02


3.浏览网页时,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器:


Python的基础——Python学习笔记02

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...

Python的基础——Python学习笔记02

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,集成开发环...

Python的基础——Python学习笔记02

hweiyi

2016年03月24日 16:34

220

python基础教程_学习笔记13:标准库:一些最爱——sys

标准库:一些最爱

sys

sys这个模块让你能够访问与python解释器联系紧密的变量和函数。

sys模块中一些重要的函数和变量

函数/变量 描述

argv 命令行参数,包括脚本名称

e...

Python的基础——Python学习笔记02

signjing

2014年06月23日 14:54

3215

Python学习笔记——基础

输出

print  ( )   或者是 print 后面直接加要输出的东西。常量字符串的话要加引号:print ("hello") 或者 print "hello"

输出中文而不报错

在Pycha...

Python的基础——Python学习笔记02

u011121046

2016年07月05日 21:49

177

Python学习笔记(二)——基础语法

交互式编程交互式编程不需要创建脚本文件,是通过 Python 解释器的交互模式进来编写代码。

下划线以单下划线开头 _foo 的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用 from...

Python的基础——Python学习笔记02

gowhere_

2017年07月05日 15:52

87

0

精彩评论

暂无评论...
验证码 换一张
取 消