python模块定义规范

Python文件头部标记

当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

'this is comment'
__author__:"changhf"
  • 第一行注释是告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;
  • 第二行注释告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。
  • 第四行默认模块的第一个字符串会被当做模块的注释,单引号或双引号,如果有多行注释,有两种方法:1、每行加#;2、用三个双引号括起来
r"""
this is first row
this is second row
"""
  • 第五行是模块的作者
python程序入口

java,C#都会有个Main类,作为程序的入口,而python则不然,它是脚本语言,只能动态的逐行解释执行。
if __name__ == '__main__'
相当于Python模拟的程序入口,Python本身并没有这么规定,这只是一种编码习惯。

if __name__ == '__main__'的意思是:

  • 当.py文件被直接运行时,if __name__ == '__main__'下的代码块将被运行;
  • 当.py文件以模块形式被导入时,if __name__ == '__main__'下的代码块不被运行。
python hello.py //直接运行hello.py文件
python -m hello.py //把hello.py当做模块运行

shell脚本中引入python脚本
#!/bin/bash

/home/tops/bin/python2.7 schedule_task.py
模块定义规范

在Python中,一个.py文件就称之为一个模块(Module)。为避免不同模块冲突,可以使用包package。只要顶层的包名不与别人冲突,那所有模块都不会与别人冲突。这样,abc.py模块的名字就变成了mycompany.abc
每一个包目录下面都会有一个__init__.py的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包。
注意:创建模块时要注意命名,不要使用中文、特殊字符,不能和Python自带的模块名称冲突。

sys.argv

sys模块有一个argv变量,用list存储了命令行的所有参数。argv至少有一个元素,因为第一个参数永远是该.py文件的名称。运行python hello.py获得的sys.argv就是[‘hello.py’]

当我们在命令行运行hello模块文件时,Python解释器把一个特殊变量__name__置为__main__,
这种if测试可以让一个模块通过命令行运行时执行一些额外的代码,最常见的就是运行测试。

if __name__=='__main__':
    test()
方法名、变量名定义习惯约定:

特殊变量:形如__author____name__,自定义变量不要用这种变量名和方法名
私有变量:_abc__abc单个或双下划线下划线开头,private类型,并生成get set方法,不应该被直接引用
普通变量:abc,x123,PI为公开变量,public类型,可以直接引用
外部不需要引用的函数全部定义成private,只有外部需要引用的函数才定义为public。
python面向对象总结-访问控制

def _private_1(name):
    return 'Hello, %s' % name

def _private_2(name):
    return 'Hi, %s' % name

def greeting(name):
    if len(name) > 3:
        return _private_1(name)
    else:
        return _private_2(name)
python多线程

1、threading
绝大多数情况下,我们只需要使用Python的标准库提供的threading这个高级模块来处理多线程,
Python的threading模块有个current_thread()函数,它永远返回当前线程的实例。主线程实例的名字叫MainThread,子线程的名字在创建时指定,我们用LoopThread命名子线程。
2、ThreadLocal
在多线程环境下,每个线程都有自己的数据。一个线程使用自己的局部变量比使用全局变量好,因为局部变量只有线程自己能看见,不会影响其他线程,而全局变量的修改必须加锁。
ThreadLocal最常用的地方就是为每个线程绑定一个数据库连接,HTTP请求,用户身份信息等,这样一个线程的所有调用到的处理函数都可以非常方便地访问这些资源。
一个ThreadLocal变量虽然是全局变量,但每个线程都只能读写自己线程的独立副本,互不干扰。ThreadLocal解决了参数在一个线程中各个函数之间互相传递的问题。
3、python语言使用场景
对于计算密集型任务,最好用C语言编写。
IO密集型,是涉及到网络、磁盘IO的任务都是IO密集型任务,大部分任务都是这种如Web应用
IO密集型任务执行期间,99%的时间都花在IO上,花在CPU上的时间很少。对于IO密集型任务,最合适的语言就是开发效率最高(代码量最少)的语言,脚本语言是首选

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值