Python初学之注意事项

Python一切皆对象。


1.每个import语句尽量只导入一个模块,避免一次导入多个模块

2.如果语句太长,可在行尾使用续行符‘\’表示下面紧接的一行仍属于当前语句。但是一般建议是用括号来包含多行内容。

3.一般而言,运算符两侧。函数参数之间、逗号两侧建议使用空格进行分隔,不同的代码块之间、不同的函数定义、不同的类定义之间则建议增加一个空行以增加可读性。

4.适当使用异常处理来提高代码的健壮性和容错性,但是不能过于依赖异常处理,适当的显示判断是必要的。


5.不能使用关键词作为变量,可以导入keyword,print keyword.kwlist 查看所有的Python关键字.

6.不建议使用系统内置的模块名作为变量。可以通过dir(__builtins__)查看所有内之模块类型和函数。

7.变量名区分大小写。

8.使用pip工具管理python扩展库。Python3.4.0和Python2.7.9之前的版本需要首先安装pip命令才可以使用,而这之后安装包已经集成了该命令,不需要安装。

查看pip命令是否有重复路径,cmd命令:where pip。

    从结果中,可以看到会存在两个路径,其中一个为python3.x的路径,一个为python2.x的路径。

    拷贝环境变量path到txt中,去掉有关python3.x的相关路径,保存,重新开个控制台,输入pip,可以看到help信息,问题完美解决。

多版本pip用法:


那么,有人环境中的确存在两个版本的Python,并且都安装了pip,那么,如何为指定版本的python用pip安装包呢?方法如下:


python2 -m pip install xxx


or


python3 -m pip install xxx


通过指明python版本来调用对应的pip程序。
 重要:使用 Python -m pip install xxx来安装第三方模块。


9.python脚本的__name__属性

若脚本作为模块被导入,则其__name__属性被自动设置为模块名,若脚本独立运行,则其__name__属性值被设置为__main__。假设文件a.py中只有一行代码:

print  __name__

则在IDLE或者在命令提示符中直接运行时结果为:__main__。但是若把改文件作为模块导入,则结果是a。

利用__name__属性,在编写一个包含大量函数的模块时,不希望其直接运行后续程序则可以在程序中添加如下代码:

if __name__ = ‘main’:

      print‘please use me as a module’

这样程序直接运行时,会得到提示。而使用import语句导入该模块可以使用其中的类方法等。


10.python的包

Python中,一个.py文件就称之为一个模块(Module);如果不同的人编写的模块名相同怎么办?为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package);引入了包以后,只要顶层的包名不与别人冲突,那所有模块都不会与别人冲突。现在,abc.py模块的名字就变成了mycompany.abc,类似的,xyz.py的模块名变成了mycompany.xyz。请注意,每一个包目录下面都会有一个__init__.py的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包。__init__.py可以是空文件,也可以有Python代码,因为__init__.py本身就是一个模块,而它的模块名就是mycompany

 

类似的,可以有多级目录,组成多级层次的包结构。每一层都要有__init__.py文件,即在包的每个目录中都必须包含一个__init__.py文件,这个文件可以为空,仅用于表示该目录是一个包。__init__.py文件的主要用途是设置__all__变量以及初始化包所需要的代码,其中__all__变量中定义的对象可以在使用from。。import*时,全部被正确导入。

 

11.

脚本语言的第一行,目的就是指出,你想要你的这个文件中的代码用什么可执行程序去运行它,就这么简单。

#!/usr/bin/python : 是告诉操作系统执行这个脚本的时候,调用 /usr/bin 下的 python 解释器;

#!/usr/bin/env python(推荐): 这种用法是为了防止操作系统用户没有将 python 装在默认的 /usr/bin 路径里。当系统看到这一行的时候,首先会到 env 设置里查找 python 的安装路径,再调用对应路径下的解释器程序完成操作。

#!/usr/bin/python 相当于写死了python路径;

#!/usr/bin/env python 会去环境设置寻找 python 目录,推荐这种写法

12.注意:#coding=utf-8 的 = 号两边不要空格。

13.pycharm注册
(1)在激活界面的License server输入:http://idea.liyang.io/;或者:点击help→Register→License sever ,输入http://idea.liyang.io
(2)在浏览器的地址栏输入:http://idea.lanyus.com/,该网址,无需修改用户名,点击获取注册码。复制该注册码,粘贴在注册界面的Activation code的输入框中,点击 ok。

14.

Python 3.X 的版本中已经没有 cmp 函数,如果你需要实现比较功能,需要引入 operator 模块,适合任何对象,包含的方法有:
operator.lt(a, b)
operator.le(a, b)
operator.eq(a, b)
operator.ne(a, b)
operator.ge(a, b)
operator.gt(a, b)
operator.__lt__(a, b)
operator.__le__(a, b)
operator.__eq__(a, b)

operator.__ne__(a, b)
operator.__ge__(a, b)
operator.__gt__(a, b)
实例
>>> import operator
>>> operator.eq('hello', 'name');
False
>>> operator.eq('hello', 'hello');
True

cmp(x, y) 函数在 python3.x 中不可用,可用以下函数替代:

operator.lt(a, b)           lt(a, b) 相当于 a < b
operator.le(a, b)           le(a,b) 相当于 a <= b
operator.eq(a, b)           eq(a,b) 相当于 a == b
operator.ne(a, b)           ne(a,b) 相当于 a != b
operator.ge(a, b)           gt(a,b) 相当于 a > b
operator.gt(a, b)           ge(a, b)相当于 a>= b

15.冒泡排序

#!/usr/bin/python
# -*- coding: UTF-8 -*-

array = [9,2,7,4,5,6,3,8,1,10]       
L = len(array)
for i in range(L):
    for j in range(L-i):
        if array[L-j-1]<array[L-j-2]:
            array[L-j-1],array[L-j-2]=array[L-j-2],array[L-j-1]
for i in range(L):
    print array[i],

16.Python expandtabs() 方法把字符串中的 tab 符号('\t')转为空格,tab 符号('\t')默认的空格数是 8


17.python常用转义符:\n换行符,\a响铃,\b 退格,\000空格,\v纵向制表,\t横向制表符,\(在行尾)续行符,


18.使用eval的例子:

a = '1+2'

print eval(a)

19.程序设计原则

清晰第一,效率第二。严格缩进:行首的空白称为缩进,Python用代码块的缩进来代表代码之间的逻辑关系。
(1).缩进:
Python依靠缩进对代码进行解释和执行。
1.同一层次的语句必须有相同的缩进,每一组这样的语句成为一个块。
2.Python并没有指定缩进的空白数目。
3.强烈建议在每个缩进层次使用单个制表符(tab)和四个空格。(要么都是空格要么都是Tab制表符,不许混用。)

(2).逻辑行和物理行:
物理行是Python书写程序代码表现形式。
逻辑行是Python解释的代形式。
Python的物理行和逻辑行做好以一一对应,每行都使用一个语句,便于代码的易读性和理解。
1.一个物理行使用多个逻辑行,多条语句书写在一起,使用“;”隔开。
如:a = '1';b = '2';c = '3';
2.当一个语句过长时,可以跨行书写,即在多个物理行中写一个逻辑行,在行尾用‘\’作为续行符。
如:print\
    t
等价于 print t
3.当语句中包含[]、{}、()时,就不需要使用多行连接符。
如:打印
aticle =['a','b','c','d',
'e','f']

(3).空行:
函数之间活着累的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行 分隔,以突出函数入口的开始。
空行与缩进不同,空行不是Python语法的一部分,书写时,不插入空行,Python解释器运行也不会出错,但是空行的作用在于分隔两端不同功能或者含义的代码,便于日后的维护和重构。


(4). 注释:
注释的作用便于读者思考每一个函数,每一个过程,每一条语句的意义,有利于程序的维护和调试。
1.使用‘#’进行单行注释。
如:
2.使用三引号 '''进行多行注释。


  

20.reload() 函数
当一个模块被导入到一个脚本,模块顶层部分的代码只会被执行一次。
因此,如果你想重新执行模块里顶层部分的代码,可以用 reload() 函数。该函数会重新导入之前导入过的模块。语法如下:
reload(module_name)
在这里,module_name要直接放模块的名字,而不是一个字符串形式。比如想重载 hello 模块,如下:
reload(hello)


21.

globals() 和 locals() 函数

根据调用地方的不同,globals() 和 locals() 函数可被用来返回全局和局部命名空间里的名字。

如果在函数内部调用 locals(),返回的是所有能在该函数里访问的命名。

如果在函数内部调用 globals(),返回的是所有在该函数里能访问的全局名字。

两个函数的返回类型都是字典。所以名字们能用 keys() 函数摘取。



22.当你导入一个模块,Python 解析器对模块位置的搜索顺序是:
1、当前目录
2、如果不在当前目录,Python 则搜索在 shell 变量 PYTHONPATH 下的每个目录。
3、如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/。
模块搜索路径存储在 system 模块的 sys.path 变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。


23.PYTHONPATH 变量
作为环境变量,PYTHONPATH 由装在一个列表里的许多目录组成。PYTHONPATH 的语法和 shell 变量 PATH 的一样。
在 Windows 系统,典型的 PYTHONPATH 如下:
set PYTHONPATH=c:\python27\lib;
在 UNIX 系统,典型的 PYTHONPATH 如下:
set PYTHONPATH=/usr/local/lib/python


24.统相关的信息模块: import sys
sys.argv 是一个 list,包含所有的命令行参数.    
sys.stdout sys.stdin sys.stderr 分别表示标准输入输出,错误输出的文件对象.    
sys.stdin.readline() 从标准输入读一行 sys.stdout.write("a") 屏幕输出a    
sys.exit(exit_code) 退出程序    
sys.modules 是一个dictionary,表示系统中所有可用的module    
sys.platform 得到运行的操作系统环境    
sys.path 是一个list,指明所有查找module,package的路径.  
操作系统相关的调用和操作: import os
os.environ 一个dictionary 包含环境变量的映射关系   
os.environ["HOME"] 可以得到环境变量HOME的值     
os.chdir(dir) 改变当前目录 os.chdir('d:\\outlook')   
注意windows下用到转义     
os.getcwd() 得到当前目录     
os.getegid() 得到有效组id os.getgid() 得到组id     
os.getuid() 得到用户id os.geteuid() 得到有效用户id     
os.setegid os.setegid() os.seteuid() os.setuid()     
os.getgruops() 得到用户组名称列表     
os.getlogin() 得到用户登录名称     
os.getenv 得到环境变量     
os.putenv 设置环境变量     
os.umask 设置umask     
os.system(cmd) 利用系统调用,运行cmd命令   
内置模块(不用import就可以直接使用)常用内置函数:
help(obj) 在线帮助, obj可是任何类型    
callable(obj) 查看一个obj是不是可以像函数一样调用    
repr(obj) 得到obj的表示字符串,可以利用这个字符串eval重建该对象的一个拷贝    
eval_r(str) 表示合法的python表达式,返回这个表达式    
dir(obj) 查看obj的name space中可见的name    
hasattr(obj,name) 查看一个obj的name space中是否有name    
getattr(obj,name) 得到一个obj的name space中的一个name    
setattr(obj,name,value) 为一个obj的name   
space中的一个name指向vale这个object    
delattr(obj,name) 从obj的name space中删除一个name    
vars(obj) 返回一个object的name space。用dictionary表示    
locals() 返回一个局部name space,用dictionary表示    
globals() 返回一个全局name space,用dictionary表示    
type(obj) 查看一个obj的类型    
isinstance(obj,cls) 查看obj是不是cls的instance    
issubclass(subcls,supcls) 查看subcls是不是supcls的子类  


25.软件测试与开发齐头并进。完整的python编码规范请参考PEP8,在编写python程序时严格遵守以上约定俗成的规范。pychecker可以用来检查python程序中的错误,并提示代码中的不规范之处。Pylint可以模块是否符合编码规范。


26.python文件名:


py是python源文件,解释器执行

pyw是python源文件,图形用户界面程序文件

pyc是字节码文件

pyd文件,一般是用其他语言编译成的。



3).空行:

函数之间活着累的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行分隔,以突出函数入口的开始。

空行与缩进不同,空行不是Python语法的一部分,书写时,不插入空行,Python解释器运行也不会出错,但是空行的作用在于分隔两端不同功能或者含义的代码,便于日后的维护和重构。



 


.原一.原则:清晰第一,效率第二。严格缩进:行首的空白称为缩进,Python用代码块的缩进来代表代码之间的逻辑关系。
(1).缩进:
Python依靠缩进对代码进行解释和执行。
1.同一层次的语句必须有相同的缩进,每一组这样的语句成为一个块。
2.Python并没有指定缩进的空白数目。
3.强烈建议在每个缩进层次使用单个制表符(tab)和四个空格。(要么都是空格要么都是Tab制表符,不许混用。)则:清晰第一,效率第二。严格缩进:行首的空白称为缩进,
Python用代码块的缩进来代表代码之间的逻辑关系。

1.缩进:

Python依靠缩进对代码进行解释和执行。

1.同一层次的语句必须有相同的缩进,每一组这样的语句成为一个块。

2.Python并没有指定缩进的空白数目。

3.强烈建议在每个缩进层次使用单个制表符(tab)和四个空格。(要么都是空格要么都是Tab制表符,不许混用。)



.原则:清晰第一,效率第二。严格缩进:行首的空白称为缩进,Python用代码块的缩进来代表代码之间的逻辑关系。

1.缩进:

Python依靠缩进对代码进行解释和执行。

1.同一层次的语句必须有相同的缩进,每一组这样的语句成为一个块。

2.Python并没有指定缩进的空白数目。

3.强烈建议在每个缩进层次使用单个制表符(tab)和四个空格。(要么都是空格要么都是Tab制表符,不许

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值