Python学习笔记(一)——入门与基础

前言

最近开始想学Python,于是上网找到了廖雪峰大神的Python教程:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000

这个教程里面用的是Python 2.x,而现在用的比较多的已经是Python 3.x了。虽然2.x比较稳定并且有很多第三方库,但是2.x已经停止发布新版本。因此显然3.x的前途比较光明。

因此,这个笔记主要是用来记录一些对教程的心得,补充,以及因为版本差别而导致的代码区别。


Python入门与基础

安装

安装没什么问题,去官网https://www.python.org/downloads/下载最新的版本(我这里用的是3.4.3),windows下是一个msi安装程序,已经包办了一切。记着在安装的时候勾上将phython.exe添加到环境变量中。

第一个Python程序

安装完成之后,打开命令行,输入python,回车。这时就直接进入了交互式Python。
输入第一段代码:

print('hello world, python!') #python3写法

在python2中,print是一个语句,不需要括号就可以使用。python3则是去掉了这个语句,将其改为了相同作用的函数。

print 'hello world, python!' #python2写法

结果:

>>>print(‘hello world, python!’)
hello world, python!

这个print和字符串中间有没有空格都是无所谓的,括号和字符串中间有没有空格也无所谓。

教程中推荐了两个代码编辑器,一个是sublime text,另一个是notepad++。我个人比较推荐sublime text,因为这个编辑器真是太风骚,太好用了。唯一美中不足的是sublime text 3收费。sublime text 2可以免费使用,只是会弹出提示框,倒也无妨。而且功能和外观上和2也什么区别,值得推荐。notepad++这个东西好在其自带一个插件,可以将代码带高亮以HTML或者RTF形式导出,在用word写东西时候很好用。

除了在命令行以交互形式写python外,作为一个脚本语言,当然可以写成一个文件然后来解释执行。只要保存成.py形式的文件,在命令行中用python xx.py就可以解释执行python文件。

在linux中可以使用直接执行.py文件。方法是先在.py文件第一行加上

#!/usr/bin/env python

然后通过命令:

$ chmod a+x xx.py

就可以直接运行.py文件了

在Windows中可以将.py用python.exe打开,也可以做到双击直接运行。

输入输出

输出:

print函数可以向屏幕打印字符串,刚才也用过了。除此之外,括号里满也可以写多个字符串,通过逗号“,”来连接:

print ('hello world', 'my name', 'is', 'python')

其结果是:

hello world my name is python

相当于,用空格将各字符串连接了起来。
print也可以直接打印数字

print (100) # 输出结果:100
print (100+200) # 输出结果:300
print ('100 + 200 =', 100 + 200) # 输出结果:100 + 200 = 300

用引号括起来的就是字符串,会原封不动地打印出来,而数字则会进行运算。

输入

有了输出,输入肯定必不可少。python3中是input(),python2是raw_input()。

name = input() # python3
name = raw_input() # python2

这里这个input()的用法和C中的gets()、C#中的Console.ReadLine()是类似的。
不过input()这个函数里面参数可以写东西:

name = input('Please input your name')

运行会发现在输出前会先输出一句话,这句话就是刚才input()中的字符串。

最后以一个小程序结束本节,这也是教程中的例子。

name = input('Please input your name: ')
print ('hello', name)

结果:

F:\魏睿\Practice\Python\learning>python a.py
Please input your name: weirui
hello weirui

基础

# print absolute value of an integer:
a = 100
if a >= 0:
    print a
else:
    print -a

#是行注释,形同C中的\\


  • Python中没有块注释。
  • Python中缩进是语法的一部分,如果没有缩进,会报错:

IndentationError: expected an indented block
数据类型和变量

Python也是一种弱类型语言,声明变量可以不声明变量类型。

整数,小数的写法和C语言没什么区别。

字符串

字符串用双引号"或者单引号'来括起来。如果字符串中有单引号',可以用双引号来将字符串括起来。比如:"I'm wr"。如果又有单引号又有双引号,那就用\来转义:'I\'m \"OK\"',表示的字符串就是:I'm "OK"

如果有好多转义的话,可以用r''来表示。

print(r'\\\\') # 输出结果为:\\\\
print('\\\\') # 输出结果为:\\

如果字符串内部有很多换行,如果不想用\n来换行的话,可以使用'''...'''的形式表示多行内容。
比如:

print('''line1
line2
line3''')

结果就是

>>> print(”’line1
line2
line3
”’)
line1
line2
line3
>>>

布尔值

真是True,假是False,注意大小写。

可以进行的运算是andornot

变量

教程中讲的很详细,除了弱类型以外,基本上和C没什么区别。

字符串和编码

Python3中默认编码是Unicode,所以可以放心大胆地写中文字符串。形如

a = '今天天气好'
print('天气好啊')
print(a)

等代码都可以没有任何问题打印出中文。
在Python2种则需要使用u'xxx'的形式来打印字符串。

Python中的格式化字符串用法和C中的printf类似,但不同的是格式化字符串并不需要print的参与,可以随时随地格式化。下面是一个例子:

'Hello %s' % 'weirui' # 结果:'Hello weirui'
'%d + %d = %d' % (1, 2, 3) # 结果:'1 + 2 = 3'
'%02d:%02d:%02d' % (12, 5, 2) # 也支持占位符,结果:'12:05:02'

要是要输出%,用%%来转义。

条件语句
if <条件判断1>:
    <执行1>
elif <条件判断2>:
    <执行2>
elif <条件判断3>:
    <执行3>
else:
    <执行4>

有几个注意的地方:

  • 冒号不能省略
  • 缩进不能省略
  • 条件语句可以不加括号

其他地方就和C之类的编程语言没什么区别了。

数组和循环语句

Python中的数组有list和tuple两种。它俩最大的区别就是前者初始化后可变,后者初始化后元素不可变。相当于变量和常量的区别。

初始化:

a = [1, 2, 3, 4] # list初始化方式
a = (1, 2, 3, 4) # tuple初始化方式

用方括号就是初始化了list,用圆括号就是初始化了tuple。在交互式中用type()函数可以查看结果:

>>> a = [1, 2]
>>> type(a)
class ‘list’
>>> a = (1, 2)
>>> type(a)
class ‘tuple’

list和tuple中的元素可以是不同类型:

a = [1, '1', '123']

也可以进行数组的嵌套:

a = [1, 2, 3]
b = [a, 4, 5, 6] # 相当于 b = [[1, 2, 3], 4, 5, 6]

可以用len()函数来获取数组长度:

a = [1,2,3,4]
len(a) # 结果:4

也支持随机存取

people = ['张三', '李四', '王五']
people[0] # 结果:'张三'
people[1] # 结果:'李四'

如果越界则会提示错误:

people[3]
# 结果:
# Traceback (most recent call last):
#   File "<pyshell#31>", line 1, in <module>
#     people[3]
# IndexError: list index out of range

但是python中一个比较有意思的地方是,若尝试people[-1]会发现并没有错误,而是会返回最后一个元素。

people[-1] # 结果:'王五'

以此类推,可以一直访问到第一个元素为止:

people[-2] # 结果:'李四'
people[-3] # 结果:'张三'
people[-4] # 结果:报错越界

使用append(element)方法可以向list末尾添加元素:

people.append('赵六') 
# people = ['张三', '李四', '王五', '赵六']

使用insert(i,element)来插入元素:

people.insert(1, '李白') 
# people = ['张三', '李白', '李四', '王五', '赵六']

删除末尾元素用pop(),删除指定位置元素用pop(i)

people.pop() # 结果:people = ['张三', '李白', '李四', '王五']
people.pop(1) # 结果:people = ['张三', '李四', '王五']

需要注意的是,tuple是没有上面的append()insert()pop()等方法的,并且也不能修改数组中的值。

Python中的循环有两种,一种是for循环,另一种是while循环

for循环的用法:(还用刚才最后执行完pop(1)的list people来示例)

for person in people:
    print (person)

结果是:

张三
李四
王五

同if语句一样,冒号不能丢了。

这样的for循环语句在C#和Java中也都存在,用来遍历数组非常好用。

而如果想实现传统的递增循环,可以借助一个range()函数来实现。range(n)函数会产生一个整数序列,其顺序是0~n-1。range(0)并不会报错,只会产生一个空序列。借助这个函数,就可以写出for (int i = 0; i < 10; i++)这种循环了:

for x in range(5):
    print (x)
# 结果:
# 0
# 1
# 2
# 3
# 4

while循环的用法也没什么特殊的,和c语言差不多:

x = 0
while x < 5:
    print (x)
    x = x + 1

结果和上面的for循环相同。

另外需要注意的一点是,和其他大多数编程语言不一样的是,python中并不需要括号来标示代码块,取而代之的是强制的缩进格式。上面的while循环虽然没有括号,但是其循环体内有两行代码,这是因为print(x)x = x + 1是相同的缩进,所以它们处于相同的代码块中。若下一行代码没有缩进,则下一行代码就不是while循环中的代码,while循环的时候就不会执行它。

字典和集合,dict和set

字典dict就是哈希表。使用键值对(key-value)来存取数据。用法很简单:

初始化:(注意是用大括号)

age = {'张三':21, '李四':35, '王五':43}

根据key访问value

age['张三'] # 结果:21

如果key不存在,则会报错:

age['赵六'] 
# 结果:
# Traceback (most recent call last):
#   File "<pyshell#75>", line 1, in <module>
#     age['赵六']
# KeyError: '赵六'

可以通过in语句,或者get()方法来检测key是否存在:

'赵六' in age # 结果:False
age.get('赵六') # 结果:返回一个None,但是在交互式中没有显示
age.get('赵六', -1) # 后面这个参数是当key不存在时返回的value,因此结果是-1

要删除某个键值对,可以用pop()方法:

age.pop('张三') # 函数返回'张三'的value 21,然后age = {'李四': 35, '王五': 43}

另外也可以直接通过key获取value然后修改value

age['李四'] = 12 # 结果age = {'李四': 12, '王五': 43}

集合set和dict不同的是,set只保存key而不保存value,并且set中不允许有重复的值出现。

set的初始化,需要一个list来作为输入集合:

a = set([1,2,3,4]) # 结果:a = {1, 2, 3, 4}

若输入重复的值,在初始化的时候就会自动过滤掉:

a = set([1,1,2,3,4,4]) # 结果:a = {1, 2, 3, 4}

可以通过add()和remve()来添加删除元素。

a.add(5) # 结果:a = {1, 2, 3, 4, 5}
a.remove(5) # 结果:a = {1, 2, 3, 4}

关于dict和set还有一点是,这两者都只能放入不可变对象。因为要进行hash操作,如果放入可变对象,那么hash值就不对了。比如这两个都不能放入list,因为list是一个可变对象。


入门与基础部分的笔记就到此结束了,这刚好对应教程中的第一个Python程序Python基础两节。

下一次的笔记将主要包括python中的函数调用,以及一些python中的高级特性诸如切片,迭代方法。

这一节就到此结束,希望对大家,对我都有所帮助。:P

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值