Python的基础——Python学习笔记02
来源:互联网 发布:ubuntu输入法设置 编辑:程序博客网 时间:2024/06/06 08:47
前言
Python是一种计算机编程语言。
计算机要根据编程语言执行任务,就必须保证编程语言写出的程序不能有歧义,故任何编程语言都有自己的一套语法,编译器或解释器就是负责把符合语法的程序代码转换成CPU能够执行的机器码,然后执行。
Python的语法采用缩进方式,写出的代码像下面的样子:
#print absolute value of an integer:a = 100if 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.pyplease enter your name:mojianhello,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 = 10x = x+2
在数学上,x=x+2
是不成立的,但是在程序中,赋值语句先计算右侧的表达式x+2
,得到结果12
,再赋给变量x
。
理解变量在计算机内存中的表示也很重要,当我们赋值一个变量a = 'ABC'
时,Python干了两件事:
1.在内存中创建了一个ABC
的字符串;
2.在内存中创建了一个名为a
的变量,并把它指向ABC
。
常量
常量就是不能改变的量,通常用全部大写的变量名表示常量。
在Python中,有两种除法:
一种除法是/
,其计算结果是浮点数,即使是整除,结果也是浮点数:
>>>9 / 33.0
另一种除法是//
,称为地板除,两个整数的除法仍然是整数:
>>>10 / 33
Python还提供一个余数运算,可以得到两个整数相除的余数:
>>>10 % 31
综合练习
题:请打印出以下变量的值:
n = 123f = 456.789s1 = 'Hello, world's2 = 'Hello, \'Adam\''s3 = r'Hello, "Bart"'s4 = r'''Hello,Lisa!'''
不唯一答案:
>>>print('''n = 123f = 456.789s1 = 'Hello,world's2 = 'Hello,\'Adam\''s3 = 'Hello,"Bart"'s4 = r\'''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
(两种写法完全是等价的):
>>>'\u4e2d\u6587''中文'
因为Python的字符串类型是str
,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需把str
变为以字节为单位的bytes
。
Python对bytes
类型的数据用带b
前缀的单引号或双引号表示:
x = b'ABC'
以Unicode表示的str
通过encode()
方法可以编码为指定的bytes
,如:
>>>'ABC'.encode('ascii')b'ABC'>>>'中文'encode('UTF-8')b'\xe4\xb8\xad\xe6\x96\x87'
如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes
。要把bytes
变为str
,就需要用decode()
方法:
>>>b'ABC'.decode('ascii')'ABC'>>>b'\xe4\xb8\xad\xe6\x96\x87'.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’,’Bob’,’Tracy’]
用len()函数可以获得list元素的个数:
>>>len(classmates)3
用索引来访问list中每一个位置的元素,记得索引是从0开始的,确保索引不越界,最后一个索引是len(classmates) -1.
如果要获取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素:
>>>classmates[-1]’Tracy’
可以向list中追加元素至末尾:
>>>classmates.append(‘Adam’)>>>classmates[‘mojian’,’Bob’,’Tracy’,’Adam’]
也可以把元素插入到指定位置,比如索引号为1的位置:
>>>classmates[1,’Jack’]>>>classmates[‘mojian’,’Jack’,’Bob’,’Tracy’,’Adam’]
要删除末尾的元素,使用pop()方法,pop(i)是删除指定位置元素的方法:
>>>classmates.pop()‘Adam’>>>classmates.pop(1)>>>classmates[‘mojian’,’Bob’,’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’,123,False,s]
要拿到java可以写s[1]或者L[3][1]
如果一个list中一个元素也没有,就是一个空的list,其长度为0.
tuple
tuple和list非常相似,但是tuple一初始化就不能修改。因为其不可变,相比list更安全。
>>>classmates = (‘mojian’,’Bob’,’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’,’b’,[‘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 = 0for x in range(101): sum = sum + xprint(sum)
第二种循环是while循环,只要条件满足,就不断循环,条件不满足时退出循环。
用while循环实现100以内的奇数之和:
sum = 0n=99while n > 0: sum = sum +n n = n-2print(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', 'Lisa', 'Adam']p = 0while p < 3 : print('Hello,%s!' %L[p]) p = p + 1
break
在循环中,break语句可以提前退出循环,如:
n = 1while n <= 100: if n >10: #当n=11时,条件满足,执行break语句 break #break语句会结束当前循环 print(n) n = n + 1print('END')
continue
在循环过程中,可以通过continue语句跳过当前的这次循环,直接开始下次循环。
如用continue打印1-10的奇书:
n = 0while 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 dFalse
二是通过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, 2, 3}
显示的{1, 2, 3}只是告诉我们这个set中有三个元素,显示的顺序也不表示set是有序的。
重复元素在set中会被自动过滤:
>>>s = set([1,1, 2, 2, 3, 3])>>>s{1, 2, 3, 4}
,通过set.add(key)方法可以添加元素到set中,可重复添加但不会有效果。
>>>s.add(4)>>>s.add(4)>>>s{1, 2, 3, 4}
通过remove(key)方法可以删除元素:
>>>s.remove(4)>>>s{1, 2, 3}
set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:
>>>s1 = set([1,2,3])>>>s2 = set([2,3,4])>>>s1 & s2{2, 3}>>>s1 | s2{1, 2, 3, 4}
set和dict的唯一区别在于没储存对应的value。
set同样不可以放入可变对象,因为不能判断两个对象是否相等,这样就不能保证内部无重复元素。
不可变对象
对于可变对象,比如list,对list进行操作,list的内容会发生改变,如:
>>>a = [‘c’, ‘b’, ‘a’]>>>a.sort()>>>a[‘a’, ’b’, ’c']
对于不可变对象,比如str,对str进行操作,str的内容不会变化,如:
>>>a = ‘abc’>>>a.replace(‘a’, ‘A’)‘Abc’>>>a‘abc’
对于不变对象来说,调用对象本身的任意方法,都不会改变自身的内容,这些方法会创建新的对象返回,这样就保证了不可变对象本身永远是不可变的。
- Python的基础——Python学习笔记02
- Python学习笔记 02 Python基础
- python学习笔记——基础入门
- Python学习笔记——语法基础
- Python基础——学习笔记
- Python学习笔记 —— 基础语法
- Python学习笔记——基础
- python学习笔记——基础练习
- Python学习笔记——基础
- Python学习笔记—基础环境配置
- 【Python】学习笔记——-2.0、Python基础
- Python学习笔记(一)——Python基础
- python学习笔记(一)——python语言基础
- Python学习笔记-Python基础
- Python学习笔记--Python基础
- 【Python】python基础学习笔记
- Python学习笔记-基础的基础
- Python基础学习笔记
- c#设计模式==抽象工厂模式
- 1019. 数字黑洞 (20)
- MEMORY主电源电压变化数据(VDD=VDDQ)
- 详解/etc/profile、/etc/bash.bahsrc、~/.profile、~/.bashrc的用途
- Linux入门3(手记)
- Python的基础——Python学习笔记02
- python-cookbook学习笔记七
- git学习总结系列(1)——基本用法
- 一、opencv的图像基本读写
- vue事件对象,冒泡,阻止默认行为
- C语言实例*2
- Error:Execution failed for task ':app:transformNativeLibsWithStripDebugSymbolForDebug'. > java.lang.
- 【Java基础】线程和并发机制
- 总结java中的反射机制