您的位置:首页 > 编程语言 > Python开发

Python快速入门教程1:Python 基础教程

2017-02-12 13:04 901 查看
第1部分:Python 基础教程

1、Hello/编码


    Python2.x中默认的编码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字,所以在读取中文时会报错。

    解决方法为只要在文件开头加入 # -*- coding: UTF-8 -*- 或者 #coding=utf-8 就行了。

    Python3.X 源码文件默认使用utf-8编码,所以可以正常解析中文,无需指定 UTF-8 编码    

    [root@hadron python]# vi hello.py
    #!/usr/bin/python
#coding=utf-8
#输出语句
print("你好,世界");
#输入语句
name=raw_input("Enter your name:")
print "hello,"+name+"!"
    [root@hadron python]# python hello.py

    你好,世界

    Enter your name:程裕强

    hello,程裕强!

    脚本说明:

    "#"后面是注释

    "/"做转义字符用

    #!/usr/bin/python是说程序用的环境的路径,/usr/bin/python是linux用的路径

    有了该声明,脚本添加可执行权限之后可以直接运行,不用每次都python

    [root@hadron python]# chmod +x hello.py

    [root@hadron python]# hello.py

    bash: hello.py: 未找到命令...

    [root@hadron python]# ./hello.py

    你好,世界

2、标示与注释

    python中的标识符是区分大小写

    以下划线开头的标识符是有特殊意义的。以单下划线开头(_foo)的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用"from xxx import *"而导入;

    以双下划线开头的(__foo)代表类的私有成员;以双下划线开头和结尾的(__foo__)代表python里特殊方法专用的标识,如__init__()代表类的构造函数。

    Python的代码块不使用大括号({})来控制类,函数以及其他逻辑判断。python最具特色的就是用缩进来写模块。

    缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量,这个必须严格执行。

    建议你在每个缩进层次使用 单个制表符 或 两个空格 或 四个空格 , 切记不能混用

    Python语句中一般以新行作为为语句的结束符,但是我们可以使用斜杠( \)将一行的语句分为多行显示。函数之间或类的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行分隔,以突出函数入口的开始。空行与代码缩进不同,空行并不是Python语法的一部分。书写时不插入空行,Python解释器运行也不会出错。但是空行的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构。

    Python可以在同一行中使用多条语句,语句之间使用分号(;)分割

    您可以通过使用del语句删除单个或多个对象的引用

   

    python中单行注释采用 # 开头。

    Python 接收单引号( ' )、双引号( " )、三引号( ''' 或 """ ) 来表示字符串,引号的开始与结束必须的相同类型的。其中三引号可以由多行组成,编写多行文本的快捷语法,常用语文档字符串,在文件的特定地点,被当做注释。

    [root@hadron python]# vi print.py     
    #!/usr/bin/python
# -*- coding: UTF-8 -*-
word="""这是一个段落
包含了多行"""
print(word);
'''
这是多行注释,使用单引号。
这是多行注释,使用单引号。
'''
"""
这是多行注释,使用双引号。
这是多行注释,使用双引号。
"""
#打印多个表达式,表达式中间会插入一个空格
print "Age:",20
#在上一句结尾处加上逗号,下一句会在同一行打印,
print "Hello,",
print "World!"
    [root@hadron python]# chmod +x print.py

    [root@hadron python]# ./print.py

    这是一个段落

            包含了多行

    Age: 20

    Hello, World!

3、变量

    [root@hadron python]# vi var.py
   
    #!/usr/bin/python
# -*- coding: UTF-8 -*-
age=20          #整型
sum=3.14        #浮点型
name="hadron"   #字符串
print age
print sum
print name
print age**sum  #age的sum次幂
print 9//2      #正数商4
print 9//2.0    #4.0
    [root@hadron python]# chmod +x var.py

    [root@hadron python]# ./var.py

    20

    3.14

    hadron

    12168.4198643

    4

    4.0

4、分支语句

    [root@hadron python]# vi if.py 
   #!/usr/bin/python
# -*- coding: UTF-8 -*-
a = 21
b = 10
c = 0
#比较运算
if(a>0):
print 'a:正数'
else:
print 'a:非正数'
if(b+c>a):
print "b+c大于a"
else:
print "b+c不大于a"
#逻辑运算
if(a and b):
print "与:如果a为False,返回False,否则它返回b的计算值"
print a and b
if(a or b):
print("或:如果a非0,返回a值,否则它返回b的计算值")
print(a or b)
print not c
    [root@hadron python]# chmod +x if.py

    [root@hadron python]# ./if.py

    a:正数

    b+c不大于a

    与:如果a为False,返回False,否则它返回b的计算值

    10

    或:如果a非0,返回a值,否则它返回b的计算值

    21

    True

    elif语句:

    [root@hadron python]# vi elif.py
#!/usr/bin/python
# -*- coding: UTF-8 -*-
num = 5
if num == 3:            # 判断num的值
print 'boss'
elif num == 2:
print 'user'
elif num == 1:
print 'worker'
elif num < 0:           # 值小于零时输出
print 'error'
else:
print 'roadman'     # 条件均不成立时输出
    [root@hadron python]# chmod +x elif.py

    [root@hadron python]# ./elif.py

    roadman

5、in与is

    [root@hadron python]# vi in_is.py  
#!/usr/bin/python
# -*- coding: UTF-8 -*-
a = 10
b = 20
list = [1, 2, 3, 4, 5 ];
if (a in list ):
print "变量 a 在给定的列表中 list 中"
else:
print "变量 a 不在给定的列表中 list 中"
if ( b not in list ):
print "变量 b 不在给定的列表中 list 中"
else:
print "变量 b 在给定的列表中 list 中"
a = "20"
b = '20'
#is是判断两个标识符是不是引用自一个对象
if ( a is b ):
print "a 和 b 引用相同对象"
else:
print "a 和 b 引用不同对象"
print id(a)
print id(b)
    [root@hadron python]# chmod +x in_is.py

    [root@hadron python]# ./in_is.py

    变量 a 不在给定的列表中 list 中

    变量 b 不在给定的列表中 list 中

    a 和 b 引用相同对象

    140232573171232

    140232573171232

6、循环语句

    else 中的语句会在循环正常执行完(即 for 不是通过 break 跳出而中断的)的情况下执行

    [root@hadron python]# vi for.py
    #!/usr/bin/python
# -*- coding: UTF-8 -*-
# while循环
i = 1
sum =0
while i < 100:
i += 1
if i%2 > 0:     # 非双数时跳过
continue
sum+=i
print sum

#for循环
for num in range(10,20):  # 迭代 10 到 20 之间的数字
for i in range(2,num): # 根据因子迭代
if num%i == 0:      # 确定第一个因子
j=num/i          # 计算第二个因子
print '%d 等于 %d * %d' % (num,i,j)
break            # 跳出当前循环
else:                  # 循环的 else 部分
print num, '是一个质数'
    [root@hadron python]# chmod +x for.py

    [root@hadron python]# ./for.py

    2550

    10 等于 2 * 5

    11 是一个质数

    12 等于 2 * 6

    13 是一个质数

    14 等于 2 * 7

    15 等于 3 * 5

    16 等于 2 * 8

    17 是一个质数

    18 等于 2 * 9

    19 是一个质数

    说明:

    语句print num, '是一个质数'

        相当于一行输出两个字符串

7、字符串

    注意文件名不能命名为string

    [root@hadron python]# vi str.py
    #!/usr/bin/python
# -*- coding: UTF-8 -*-
a = "Hello"
b = "Python"
print "a + b 输出结果:", a + b
print "a * 2 输出结果:", a * 2
print "a[1] 输出结果:", a[1]
print "a[1:4] 输出结果:", a[1:4]
if( "H" in a) :
print "H 在变量 a 中"
else :
print "H 不在变量 a 中"
print "My name is %s and weight is %d kg!" % ('Hadron', 21)
print "Python".lower()
print "Python".find("on")
    [root@hadron python]# chmod +x str.py

    [root@hadron python]# ./str.py

    a + b 输出结果: HelloPython

    a * 2 输出结果: HelloHello

    a[1] 输出结果: e

    a[1:4] 输出结果: ell

    H 在变量 a 中

    My name is Hadron and weight is 21 kg!

    python

    4

8、列表(List)

    列表是常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。

    列表中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。

    列表的数据项不需要具有相同的类型。

    与字符串的索引一样,列表索引从0开始。列表可以进行截取、组合等。

    [root@hadron python]# vi mylist.py
#!/usr/bin/python
# -*- coding: UTF-8 -*-
list=["C","C++","Java","Python",3.1415,110]
print list[0]
print list[1:3]   #[m,n]从第m+1个元素到第n个元素
print list[2:]
list[0]="C语言"       #更新
del list[1]       #删除
list.append("C#") #追加
print list
print str(list).decode('string_escape')
print len(list)   #列表长
    [root@hadron python]# chmod +x mylist.py  

    [root@hadron python]# ./mylist.py

    C

    ['C++', 'Java']

    ['Java', 'Python', 3.1415, 110]

    ['C\xe8\xaf\xad\xe8\xa8\x80', 'Java', 'Python', 3.1415, 110, 'C#']

    ['C语言', 'Java', 'Python', 3.1415, 110, 'C#']

    6

9、字典

    列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。

    [root@hadron python]# vi dict.py
#!/usr/bin/python
# -*- coding: UTF-8 -*-
dict = {}
dict[1]='hello';
dict['one']="only one"
mydict = {'name': 'john','code':6734, 'dept': 'sales'}
print dict[1]
print dict['one']
print mydict
print mydict.keys()
print mydict.values()
    [root@hadron python]# chmod +x dict.py

    [root@hadron python]# ./dict.py

    hello

    only one

    {'dept': 'sales', 'code': 6734, 'name': 'john'}

    ['dept', 'code', 'name']

    ['sales', 6734, 'john']

10、元组

    Python的元组与列表类似,不同之处在于元组的元素不能修改。

    元组使用小括号,列表使用方括号。元组与字符串类似,下标索引从0开始,可以进行截取,组合等。

    [root@hadron python]# vi mytuple.py
    #!/usr/bin/python
# -*- coding: UTF-8 -*-
tuple=('hi',1,"e",2.7,'ok',"china")
print tuple
print tuple[0]
print tuple[-2]  #反向到数第二个
print tuple[1:3] #从第2到第3个元素
print tuple[2:]
#元组不能更新,可以通过组合生成新元组
print (1,2,3)+(4,5,6)
for x in (1,2,3):print x
    [root@hadron python]# chmod +x mytuple.py

    [root@hadron python]# ./mytuple.py

    ('hi', 1, 'e', 2.7, 'ok', 'china')

    hi

    ok

    (1, 'e')

    ('e', 2.7, 'ok', 'china')

    (1, 2, 3, 4, 5, 6)

    1

    2

    3

11、时间

    [root@hadron python]# vi time.py

    [root@hadron python]# chmod +x time.py
    #!/usr/bin/python
# -*- coding: UTF-8 -*-
import time
import calendar
# 格式化成2016-03-20 11:45:39形式
print time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
cal = calendar.month(2016, 1)
print "以下输出2016年1月份的日历:"
print cal;
    [root@hadron python]# ./time.py

    Traceback (most recent call last):

      File "./time.py", line 3, in <module>

        import time

      File "/root/python/time.py", line 6, in <module>

        print time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

    AttributeError: 'module' object has no attribute 'strftime'

     import的module是time,而我给这个python文件命名的也是time,估计是冲突了

    [root@hadron python]# mv time.py mytime.py

    [root@hadron python]# rm -rf time.pyc

    [root@hadron python]# ./mytime.py

    2017-01-22 15:28:12

    以下输出2016年1月份的日历:

        January 2016

    Mo Tu We Th Fr Sa Su

                      1   2   3

      4   5   6   7   8   9 10

    11 12 13 14 15 16 17

    18 19 20 21 22 23 24

    25 26 27 28 29 30 31

12、函数

    函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。

    函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。

    函数内容以冒号起始,并且缩进

    return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

    所有参数(自变量)在Python里都是按引用传递。如果你在函数里修改了参数,那么在调用这个函数的函数里,原始的参数也被改变了。

    允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。

    [root@hadron python]# vi fun.py
    #!/usr/bin/python
# -*- coding: UTF-8 -*-
#可写函数说明
def f1(name, age ):
"打印任何传入的字符串"
print "Name: ", name;
print "Age ", age;
age=0;
name="";
return;
def f2(name="无名氏",age=18):
"缺省参数的值如果没有传入,则被认为是默认值"
print "Name: ", name;
print "Age ", age;
return;
#加了星号*的变量名会存放所有未命名的变量参数
def f3(arg1,*vartuple):
"打印任何传入的参数"
print arg1
for var in vartuple:
print var
return;
age=20
name="hadron"
#调用f1函数
f1(age, name);
f2();
f3(10);
f3(11,13,17);
    [root@hadron python]# ./fun.py

    Name:  20

    Age  hadron

    Name:  无名氏

    Age  18

    10

    11

    13

    17

13、lambda

    lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。

    lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。

    虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

    lambda的一般形式是关键字lambda后面跟一个或多个参数,紧跟一个冒号,以后是一个表达式。lambda是一个表达式而不是一个语句。它能够出现在Python语法不允许def出现的地方。作为表达式,lambda返回一个值(即一个新的函数)。

    lambda存在意义就是对简单函数的简洁表示

    lambda用来编写简单的函数,而def用来处理更强大的任务

    [root@hadron python]# vi lambda.py
    #!/usr/bin/python
# -*- coding: UTF-8 -*-
#lambda的一般形式是关键字lambda后面跟一个或多个参数,紧跟一个冒号,以后是一个表达式
sum = lambda arg1, arg2: arg1 + arg2;
print sum(10, 20)
#map函数
L = [1,2,3,4]
def inc(x):
return x+10
print map(inc,L)
print map((lambda x: x+10),L)
#filter函数
li = [11, 22, 33]
new_list = filter(lambda arg: arg > 22, li)
#reduce函数
for i in new_list:
print i
result = reduce(lambda arg1, arg2: arg1 + arg2, li)
print result
    [root@hadron python]# ./lambda.py

    30

    [11, 12, 13, 14]

    [11, 12, 13, 14]

    33

    66

14、模块

    模块就是一个保存了Python代码的文件。模块能定义函数,类和变量。模块里也能包含可执行的代码。

    想使用Python源文件,只需在另一个源文件里执行import语句,当解释器遇到import语句,如果模块在当前的搜索路径就会被导入。

    Python的from语句让你从模块中导入一个指定的部分到当前命名空间中。

    模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录

    [root@hadron python]# vi import.py
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 导入模块
import math
# 调用模块中的函数:模块.函数
print math.sqrt(2)
#变量引用函数
foo=math.sqrt
print foo(2)
    [root@hadron python]# ./import.py

    1.41421356237

    1.41421356237

    from .. import ..

    通过“from 模块 import 函数”形式引入,可以直接使用函数,而不需要使用前缀模块名    

    [root@hadron python]# vi from_import.py  
#!/usr/bin/python
# -*- coding: UTF-8 -*-
from math import sqrt
print sqrt(2)
    [root@hadron python]# ./from_import.py

    1.41421356237

15、文件I/O

    先用Python内置的open()函数打开一个文件,创建一个file对象,调用相关方法进行读写

    r:以只读方式打开文件。文件的指针将会放在文件的开头。    

    w:打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

    +:表示读写都是允许的

    a:以追加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,原内容会被保留。

    b:打开的文件为二进制文件,而非纯文字文件

    write(string)方法可将任何字符串写入一个打开的文件。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。

    write()方法不会在字符串的结尾添加换行符('\n'):

    read([count])方法从一个打开的文件中读取一个字符串

    该方法从文件的开头开始读入,如果没有传入count,它会尝试尽可能多地读取更多的内容,很可能是直到文件的末尾。

    [root@hadron python]# vi file1.py
    #!/usr/bin/python
# -*- coding: UTF-8 -*-
# 打开一个文件
f = open("test.txt", "wb+")
print "文件名: ", f.name
print "是否已关闭 : ", f.closed
print "访问模式 : ", f.mode
print "末尾是否强制加空格 : ", f.softspace
#写入文件
f.write("Hello,world!\n");
f.write("你好,世界!\n")
f.write("程裕强\n");
# 关闭打开的文件
f.close()
    [root@hadron python]# ./file1.py

    文件名:  test.txt

    是否已关闭 :  False

    访问模式 :  wrb+

    末尾是否强制加空格 :  0

    [root@hadron python]# vi file2.py
    #!/usr/bin/python
# -*- coding: UTF-8 -*-
# 打开一个文件
f = open("test.txt", "r")
#读取4个字符
str = f.read(4);
print "读取的字符串是 : ", str
#读取1行
print "读取1行:",f.readline()
#读取所有行
for  line in  f.readlines():
print  line,
# 关闭打开的文件
f.close()
    [root@hadron python]# ./file2.py

    读取的字符串是 :  Hell

    读取1行: o,world!

    你好,世界!

    程裕强

    

    [root@hadron python]# vi file3.py
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# with语句打开文件并赋值到变量f,文件在语句结束后会自动关闭
with open("test.txt", "r") as f:
while True:
# 查找当前位置
print "当前文件位置 : ", f.tell()
#输出1行
line=f.readline()
print line,
if not line:break
# 把指针再次重新定位到文件开头
f.seek(0, 0);
print "重新读取:\n", f.read();
    [root@hadron python]# chmod +x file3.py

    [root@hadron python]# ./file3.py

    当前文件位置 :  0

    Hello,world!

    当前文件位置 :  13

    你好,世界!

    当前文件位置 :  32

    程裕强

    当前文件位置 :  42

     重新读取: Hello,world!

    你好,世界!

    程裕强

16、目录
    os模块有许多方法能帮你创建,删除和更改目录。

    [root@hadron python]# vi dir.py  
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os
# 创建目录test
os.mkdir("test")
# 将当前目录改为"/root/python/test"
os.chdir("/root/python/test")
# 给出当前的目录
print os.getcwd()
    [root@hadron python]# chmod +x dir.py

    [root@hadron python]# ./dir.py

    /root/python/test

17、异常处理
    try:

    <语句>        #运行别的代码

    except <名字>:

    <语句>        #如果在try部份引发了'name'异常

    except <名字>,<数据>:

    <语句>        #如果引发了'name'异常,获得附加的数据

    else:

    <语句>        #如果没有异常发生

    [root@hadron python]# vi try.py
   #!/usr/bin/python
# -*- coding: UTF-8 -*-
try:
f = open("test", "w")
f.write("这是一个测试文件,用于测试异常!!")
except IOError:
print "Error: 没有找到文件或读取文件失败"
else:
print "内容写入文件成功"
f.close()
    [root@hadron python]# python try.py

    Error: 没有找到文件或读取文件失败

    修改:f = open("test.txt", "w")

    [root@hadron python]# python try.py

    内容写入文件成功

    [root@hadron python]# cat test.txt

    这是一个测试文件,用于测试异常!![root@hadron python]#

    以使用raise语句自己触发异常

    [root@hadron python]# vi try2.py
#!/usr/bin/python
# -*- coding: UTF-8 -*-
def f(level ):
if level < 1:
#触发异常后,后面的代码就不会再执行
raise Exception("Invalid level!", level)
try:
f(0)
except "Invalid level!":
print 1
else:
print 2
    [root@hadron python]# python try2.py

    Traceback (most recent call last):

      File "try2.py", line 8, in <module>

        f(0)              

      File "try2.py", line 6, in f

        raise Exception("Invalid level!", level)

    Exception: ('Invalid level!', 0)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐