命令行运行python文件内有变量_从终端运行python程序 模块内变量的作用域、添加模块的搜索路径...

终端窗口运行.py程序

首先你要安装python,命令行输入 python 有python提示符 >>> 出现说明安装成功

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

' a test module '

__author__ = 'Michael Liao'

import sys

def test():

args = sys.argv

if len(args)==1:

print('Hello, world!')

elif len(args)==2:

print('Hello, %s!' % args[1])

else:

print('Too many arguments!')

if __name__=='__main__':

test()

第1行和第二行是标准注释,第一行可以让这个hello.py文件直接在Unix/Linux/Mac上运行,第二行可以表示该.py文件使用的标准UTF-8编码;

第四行是一个字符串,表示模块的文档注释,任何模块的第一个字符串都默认为文档的注释

以上就是Python模块的标准文件模板,当然也可以全部删掉不写,但是,按标准办事肯定没错。

补充

1)导入sys模块后,我们就有了变量sys指向该模块,利用sys这个变量,就可以访问sys模块的所有功能。sys模块有一个argv变量,用list存储了命令行的所有参数。argv至少有一个元素,因为第一个参数永远是该.py文件的名称

2)当我们在命令行运行hello模块文件时,Python解释器把该模块内的一个特殊变量__name__置为__main__,而如果在其他地方导入该hello模块时,if判断将失败,因此,这种if测试可以让一个模块通过命令行运行时执行一些额外的代码,最常见的就是运行测试。

输入命令格式

这里的地址是完整的地址,

python D:\desktop\forTest.py #文件的完整目录

结果:

命令行里的 python shell 环境

打开cmd后直接输入 python 会进入 python 的 shell 环境,这里可以可以输入命令,还有就是 shell 里会有提示符 >>>

如 print('I love you')

运行结果:

使用 exit() 退出 python 的 shell 环境

File "", line 1 错误:

在shell 里面输入 python +程序名字 ,会出现这个错误,应该在终端下运行(见上)

模块内的作用域

这个模块内的作用域和变量的作用域有些区别,前者区分的是不同模块内的变量名,即该模块被导入后模块内的变量是否能被新模块引用。(但是通过增加下划线确实能将public变量变为private变量,在一个模块中的变量也能受到影响,参见面向对象编程

在模块中,我们可能会定义很多函数和变量,有的函数和变量我们希望给别人使用,但是有的变量和函数我们不希望被别人使用。在python中,是通过_前缀来实现的。

正常的函数和变量名是公开的(public),可以被直接引用,比如:abc,x123,PI等;

类似__xxx__这样的变量是特殊变量,可以被直接引用(但是不可以自己创建),但是有特殊用途,比如上面的__author__,__name__就是特殊变量,hello模块定义的文档注释也可以用特殊变量__doc__访问,我们自己的变量一般不要用这种变量名;

类似_xxx和__xxx这样的函数或变量就是非公开的(private),不应该被直接引用,比如_abc,__abc等;

之所以我们说,private函数和变量“不应该”被直接引用,而不是“不能”被直接引用,是因为Python并没有一种方法可以完全限制访问private函数或变量,但是,从编程习惯上不应该引用private函数或变量。

#被导入的模块forTest2.py代码

#__arbitrarily__=='不能任意命名的特殊变量'#不能这样,会报错

arbitrarily='能被直接引用的变量'

_arbitrarily='非公开,不应该被直接引用,但是能'

__arbitrarily='非公开,不应该被直接引用,但是能,和上面的一样'

#作为测试的模块,其中导入了forTest2.py

import forTest2

print(forTest2.arbitrarily)

print(forTest2._arbitrarily)

print(forTest2.__arbitrarily)

print(forTest2.__name__)

#输出

能被直接引用的变量

非公开,不应该被直接引用,但是能

非公开,不应该被直接引用,但是能,和上面的一样

forTest2

private函数或者变量不应该被别人引用,那么可以用来干什么呢,可以用来做代码封装和抽象,如:

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)

在模块里公开greeting函数,而把内部逻辑用private函数隐藏起来了,这样,调用greeting函数不用关心内部的private函数细节,这也是一种非常有用的代码封装和抽象的方法,即:外部不需要引用的函数全定义为private,只有外部需要引用的函数才定义为public

数据封装、继承和多态是面向对象编程的三大特点

模块的搜索路径

当我们试图导入一个模块时,python会在指定的路径下搜索对应的.py文件,如果找不到就会报错

>>> import mymodule

Traceback (most recent call last):

File "", line 1, in

ImportError: No module named mymodule

默认情况下,python会搜索当前目录,所有已安装的内置模块和第三方模块,搜索路径存放在sys的path变量当中

>>> import sys

>>> sys.path

['', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python36.zip', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6', ..., '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages']

有两种办法可以添加自己的搜索目录

一是直接修改sys.path,添加要搜索的目录

>>> import sys

>>> sys.path.append('/Users/michael/my_py_scripts')

这种方法是在运行时修改,运行结束后失效

第二种方法时修改环境变量PYTHONPATH,该环境变量的内容会被自动添加到模块搜索路径中,设置方式与设置Path环境变量类似。注意只需要添加你自己的搜索路径,Python自己本身的搜索路径不受影响

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值