Python核心编程——快速入门

一、程序输出,print语句及“Hello World!”

    在有些语言中,比如C通过函数输出数据到屏幕,printf()。而在Python和大多数解释执行的脚本语言中,使用语句进行输出。很多的shell脚本语言使用echo 命令来输出程序结果。
    在交互式解释器中显示变量的值——通常会在代码中使用print语句输出,不过在交互式解释器中,可以用print语句显示变量的字符串表示,或者仅用变量名来查看该变量的原始值。
>>> myString = 'Hello World!'
>>> print myString
Hello World!
>>> myString
'Hello World!'
>>> 

需注意,在仅使用变量名时,输出的字符串是用单引号括起来的。这是为了让非字符串对象也能以字符串的方式显示在屏幕上——即它显示的是该对象的字符串表示,而不仅仅是字符串本身。引号表示你刚刚输入的变量值是一个字符串。print语句调用str()函数显示对象。而交互式解释器则调用repr()函数显示对象。  
    下划线“_” 在解释器中有特别的含义,表示最后一个表达式的值。
    
    >>> _
    'Hello World!'


    Python的print语句,与字符串格式操作符(%)结合使用,可实现字符串替换功能。
    
    >>> print "%s is number %d!" % ("python",1)
    python is number 1!

    print语句也支持将输出重定向到文件。从Python2.0新增。用符号“>>”重定向。 
 将输出重定向到标准错误输出。
>>> print >> sys.stderr, 'Fatal error: invalid input!'
Fatal error: invalid input!

将输出重定向到日志文件:
>>> logfile = open('/tmp/mylog.txt','a')
>>> print >> logfile, 'Fatal error: invalid input!'
>>> logfile.close()

[root@localhost ~]# cat /tmp/mylog.txt 
Fatal error: invalid input!

二、程序输入和raw_input()内建函数

    使用raw_input()内建函数读取标准输入,并将读取到的数据赋值给指定的变量。可以用int()内建函数将用户输入字符串转换为整形。
>>> user = raw_input('Enter login name: ')
Enter login name: root
>>> print 'Your login is:', user
Your login is: root

>>> num = raw_input('Now enter a number: ')
Now enter a number: 1024
>>> print 'Doubling your number : %d' % (int(num) * 2)
Doubling your number : 2048

从交互式解释器中获得帮助
使用内建函数help()。比如help(raw_input) 
Help on built-in function raw_input in module __builtin__:

raw_input(...)
    raw_input([prompt]) -> string
    
    Read a string from standard input.  The trailing newline is stripped.
    If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.
    On Unix, GNU readline is used if enabled.  The prompt string, if given,
    is printed without a trailing newline before reading.
从标准输入读取一个字符串并自动删除串尾的换行字符。如果用户键入了EOF字符(Ctrl+D或Ctrl+Z+回车),则引发EOFError,在Unix平台,,只要可用,就使用GUN readline库。如果提供提示字符串参数,则显示该字符串并自动删去字符串末尾的换行字符。

三、注释

Python使用 # 符号标示注释,从 # 开始,知道一行结束的内容都是注释。
>>> # one comment
... print 'Hello World!'      # another comment
Hello World!
有一种叫做文档字符串的特别注释,可以在模块、类或者函数的起始添加一个字符串,起到在线文档的功能。
>>> def foo():
... 	"This is a doc string."
... 	return True  
文档字符串可以在运行时访问,也可以用来生成自动文档。

四、操作符

与一般语言一样,操作符以你熟悉的方式工作。但Python有两种除法,一种单斜杠用于传统除法,双斜杠用作浮点除法(对结果进行四舍五入)。
>>> print 5.0 / 3
1.66666666667
>>> print 5.0 // 3
1.0
还有一个乘方操作符,双星号(**)。
>>> print -2 * 4 + 3 ** 2
1
Python当然也有标准比较操作符,根据表达式的值的真假返回布尔值。
Python支持两种“不等于”比较操作符,!=   和  <>  ,推荐使用前者。
>>> 3 < 4 < 5
True
上面的表达式等同于 3 < 4 and 4 < 5


五、变量和赋值

Python的变量名是大小写敏感的。
Python是动态类型语言,不需要预先声明变量的类型。变量的类型和值在赋值的那一刻就被初始化。变量赋值通过等号来执行。
>>> counter = 0
>>> miles = 1000.0
>>> name = 'Bob'
>>> counter = counter + 1
>>> kilometers = 1.609 * miles
>>> print '%f miles is the same as %f km' % (miles,kilometers)
1000.000000 miles is the same as 1609.000000 km
Python也支持增量赋值,就是操作符和等号合并在一起。
      n *= 10
Python不支持C语言中的自增1和自减1操作符,Python会将--n 解释为 -(-n)从而得到1.


六、数字

Python支持五种基本数字类型,其中有三种是整型类型。
有符号整型
    长整型
    布尔值
浮点值
复数

    Python的长整型所能表达的范围远远超过C语言的,事实上,它仅受限于用户计算机的虚拟内存总数。从Python2.3开始,再也不会报整型溢出错误,结果会被自动转为长整型。
    其实还有第六种数字类型,decimal,用于十进制浮点型。不过它并非内建类型,你必须先导入decimal模块才能使用。但是在Python2.4中增加了这种类型。


七、字符串

    Python中字符串被定义为引号之间的字符集合。Python支持使用成对的单引号或双引号。三引号可以用来包含特殊字符。使用索引操作符( [] )和切片操作符( [ : ] )可以得到子字符串。字符串有特有的索引规则:第一个字符的索引是 0 ,最后一个字符的索引是 -1 。
    加号 ( + )用于字符串连接运算,星号( * )用于字符串重复。
    
>>> pystr = 'Python'
>>> iscool = 'is cool!'  
>>> pystr[0] 
'P'
>>> pystr[2:5]
'tho'
>>> iscool[:2]
'is'
>>> iscool[3:]
'cool!'
>>> iscool[-1]
'!'
>>> pystr + iscool
'Pythonis cool!'
>>> pystr + ' ' + iscool
'Python is cool!'
>>> pystr * 2
'PythonPython'
>>> '-' * 20
'--------------------'
>>> pystr = '''Python 
... 	is cool!'''
>>> pystr
'Python \n\tis cool!'
>>> print pystr
Python 
	is cool!


八、列表和元组

    可以将列表和元组当成普通的“数组”,它能保存任意数量任意类型的Python对象。从0开始索引访问,但是列表和元组可以存储不同类型的对象。
    列表和元组有几处重要区别。列表元素用中括号‘[]’包裹,元素的个数及元素的值可以改变。元组元素用小括号“()”包裹,不可以更改。元组可以看成是只读的列表。
    
>>> l1 = [1,2,3,4] 
>>> l1
[1, 2, 3, 4]
>>> l1[0]
1
>>> l1[:3]
[1, 2, 3]
>>> l1[2:]
[3, 4]
>>> l1[3] = 5
>>> l1
[1, 2, 3, 5]
元组也可以进行切片运算,得到的结果还是元组,不能被修改。
>>> t1 = ('robots',22,33,'try')
>>> t1
('robots', 22, 33, 'try')
>>> t1[:3]
('robots', 22, 33)
>>> t1[1] = 5
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment


九、字典

由键-值对构成,几乎所有的Python对象都可以用作键,但一般还是以数字或字符串为主,值可以是任意类型的Python对象。字典用大括号 {} 包裹。


十、代码块及缩进

代码块通过缩进对齐表达式代码逻辑。

十一、if语句

if  expression:
    if_suite

if expression:
    if_suite
elif:
    elif_suite
else:
    else_suite


十二、while循环

while expression:
    while_suite

十三、for 循环和range()内建函数

Python的for循环类似于shell脚本里的foreach迭代,for 接受可迭代对象作为其参数,每次迭代其中一个元素。

>>> print 'I like to use the internet for: '
I like to use the internet for: 

>>> for item in ['e-mail', 'net-surfing', 'homework', 'chat']:
...     print item
e-mail
net-surfing
homework
chat

>>> for item in ['e-mail', 'net-surfing', 'homework', 'chat']:
...     print item,
e-mail net-surfing homework chat

print 语句会默认网每一行添加一个换行符,只要在print语句最后添加一个逗号(,),就可以改变这种行为。
>>> print 'I like use the internet for : '
... for item in ['e-mail', 'net-surfing', 'homework', 'chat']:
...     print item,
... print
I like use the internet for : 
e-mail net-surfing homework chat

可以通过一个没有任何参数的print语句,输出一个换行符。否则提示信息会立即出现在我们输出之后。

range()函数和len()函数一起用于字符串索引。
>>> foo = 'abc'

>>> for i in range(len(foo)):
...     print foo[i], '(%d)' % i
a (0)
b (1)
c (2)

不过这些循环有个约束,就是要么循环索引,要么循环元素。这导致了enumerte()函数的诞生。

>>> for i, ch in enumerate(foo):
...     print ch, '(%d)' % i
a (0)
b (1)
c (2)


十四、列表解析

>>> squared = [ x ** 2 for x in range(5)]

>>> for i in squared:
...     print i
0
1
4
9
16


>>> sqdEvens = [x ** 2 for x in range(16) if not x % 2]

>>> for i in sqdEvens:
...     print i
0
4
16
36
64
100
144
196

十五、文件和内建函数open(),file()


handle = open(file_name, access_mod = 'r')
file_name 表示文件名,access_mod中的 ‘r’ 表示读取, ‘w’表示写入,‘a’表示添加。其他可能用到的标示有
“+” 表示读写, ‘b'表示二进制访问。默认为’r‘。如果 open()成功,则会返回一个文件对象句柄。所有后续的文件操作都必须通过此文件句柄进行。文件对象的方法属性也必须通过句点属性标识法访问。

filename = raw_input('Enter file name: ')
fobj = open(filename, 'r')
for eachLine in fobj:
    print eachLine,
fobj.close()

以上这段代码,我们一次读入文件的所有行,然后关闭文件,再迭代每一行输出。这样写的好处是可以快速完整的访问文件,但是文件太大会占用太多内存。
另外,我们在print 语句中使用了 , 来抑制自动生成的换行符号。因为文本中的每一行自带了换行字符,如果不这样,就会产生多余的空行
[root@localhost mypython]# python open_file.py 
Enter file name: /etc/passwd     
root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

file()内建函数的功能等同于open(),不过file() 这个名字可以更确切的表明它是一个工厂函数(生成文件对象)。类似于int()生成整型对象,dict()生成字典对象。

十六、错误和异常

Python允许程序运行时检测错误。当检测到一个错误,Python解释器就引发一个异常,并显示异常的详细信息。
要给自己的代码添加错误检测以及异常处理,只要将它们封装在 try-except语句当中。try之后的代码组,就是你打算管理的代码。except之后的代码组,则是处理错误的代码。
try:
    filename = raw_input('Enter file name: ')
    fobj = open(filename, 'r')
    for eachLine in fobj:
        print eachLine
    fobj.close()
except IOError, e:
    print 'file open error: ', e
程序员也可以使用raise语句故意引发一个异常。


十七、函数
       类似其他语言,Python中的函数使用小括号调用。函数在调用之前必须先定义。如果函数中没有return语句,则会自动返回None对象。         
        Python是通过引用调用函数的。这意味着函数内对参数的改变会影响到原始对象。不过事实上只有可变对象才会受此影响,不不可变对象来说,它的行为类似按值调用。
17.1  如何定义函数
def function_name([arguments]):
     "optional documentation string"
     function_suite
exp:
def add(x):
    'apply + operaion to argument'
    return (x + x)
17.2  如何调用函数
>>> def add(x):
...     return (x + x)

>>> add(4.25)
8.5

>>> add(10)
20

>>> add('Python')
'PythonPython'

>>> add([1,'abc'])
[1, 'abc', 1, 'abc']

为函数名加上函数操作符—— 小括号。括号之间是所有可选的参数。即使一个参数也没有,小括号也不能省略。

17.3  默认参数
       函数的参数可以有一个默认值,如果提供默认值,在函数的定义中,参数以赋值的形式提供。事实上这仅仅是提供默认参数的语法,它表示函数调用时如果没有提供这个参数,它就取这个值为默认值
>>> def foo(debug=True):
...     if debug:
...         print 'in debug mode'
...     print 'done'

>>> foo()
in debug mode
done

>>> foo(False)
done

这个例子中,debug参数有一个默认的值True。


十八、类
        类是面向对象编程的核心,它扮演相关数据及逻辑容器的角色。它们提供了创建”真实“对象(实例)的蓝图。
如何定义类
class ClassName(base_class[es]):
    "optional documentation string"
    static_member_declarations
    method_declarations

     使用class关键字定义类。可以提供一个可选的父类或者说是基类;如果没有合适的基类,就使用object作为基类。class行之后是可选的文档字符串、静态成员定义和方法定义。
>>> class FooClass(object):
...     """my very first class : FooClass"""
...     version = 0.1 # class (data) attribute
...     def __init__(self, nm='John Doe'):
...         """constructor"""
...         self.name = nm  # class instance (data) attribute
...         print 'Created a class instance for', nm
...     def showname(self):
...         """display instance attribute and class name"""
...         print 'Your name is ', self.name
...         print 'My name is ', self.__class__.__name__
...     def showver(self):
...         print self.version
...     def add(self, x):
...         return x + x

在上面这个类中,我们定义一个静态变量version,它将被所有实例及4个方法共享。这些方法仅仅输出对应的信息。__init__()方法有个特殊的名字,所有名字开始和结束都有两个下划线的方法都是特殊方法。、
        当一个类实例被创建时,__init__() 方法会自动执行,在类实例创建完毕后执行,类似构造器。__init__()可以被当成构造器,不过不像其他语言中的构造器,它并不创建实例——它仅仅是你的对象创建后执行的第一个方法。它的目的是执行一些该对象必要的初始化工作。
        通过创建自己的__init__()方法,可以覆盖默认的该方法(默认什么也不做),从而能够修饰刚刚创建的对象。__init__()需要一个默认的参数,例子中每个方法都有的一个参数——self。它是类实例自身的引用。

如何创建类实例
>>> fool = FooClass()
Created a class instance for John Doe

这里显示的就是自动调用__init__()方法的结果。

       创建一个类实例就像调用一个函数,它们确实拥有一样的语法,它们都是可调用对象。类实例使用同样的函数操作符调用一个函数或方法。
>>> fool.showname()
Your name is  John Doe
My name is  FooClass

>>> fool.showver()
0.1

>>> print fool.add(5)
10

>>> print fool.add('world')
worldworld

我们在创建类实例时并未传递名字参数,因此使用默认参数。加入我们传递一个参数。
>>> fool2 = FooClass('Beny')
Created a class instance for Beny

>>> fool2.showname()
Your name is  Beny
My name is  FooClass


十九、模块 
        模块是一种组织形式,它将彼此有关系的Python代码组织到一个个独立文件当中。模块可以包含执行代码、函数和类,或者它们的组合。
        当你创建了一个Python源文件,模块的名字就是不带.py 后缀的文件名。一个模块创建后,你可以从另一个模块中使用import语句来导入这个模块来使用。
19.1 如何导入模块
import  module_name

19.2  如何访问一个模块函数或模块变量
module.function()
module.variable

>>> import sys

>>> sys.stdout.write('Hello world!\n')
Hello world!

>>> sys.platform
'linux2'

>>> sys.version
'2.7.11 (default, Apr 18 2016, 21:23:06) \n[GCC 4.8.3 20140911 (Red Hat 4.8.3-9)]'


关于PEP:
       一个PEP就是一个Python增强提案(Python Enhancement Proposal),这也是在新版Python中增加新特性的方式。

二十、实用的函数
         函数                                                                         描述
 dir([obj])                  显示对象的属性,如果没有提供参数,则显示全局变量的名字。
help([obj])                以一种整齐美观的形式,显示对象的文档字符串,若未提供参数,则进入交互式帮助。
int(obj)                      将一个对象转换为整型。
len(obj)                     返回对象的长度。 
open(fn,mode)          以mode方式打开一个文件名为fn的文件。
range([[start,]stop[,step])      返回一个整型列表,起始值start,结束值stop-1,start默认0,step默认1
raw_input(str)           等待用户输入一个字符串,可以提供可选参数str用作提示信息。
str(obj)                      将一个对象转换为字符串。
type(obj)                   返回对象类型。






















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值