今天的学习内容是一些基础的Python脚本概念,我们将把代码写入到一个脚本里面,函数,类和sys模块。嗯…和上节课比,又有新的开始。
Python脚本框架**
下面是一个开始写Python脚本的基础例子,开始部分,告诉系统需要使用那一个解释器"#!/usr/bin/env python",然后我们通过"def main():"声明一个main函数,最后2行代码有mian()的先执行。你可以定义在你的脚本里面定义其它函数,这样使得你的代码更容易的理解和修改维护:
#!/usr/bin/python
import ,
def myFunction():
def main():
myFunction()
if name==“main”:
main()
函数**
一种常见的写法是把每个功能函数分开写,执行一些操作之后然后返回结果。下面的这个伪代码演示的例子就能够很清晰的解释这个概念:
声明:
def MyFunction:
…do work…
return output
调用:
def main():
output = MyFunction(input)
类**
Python类开始使用的时候会有点困难,因为它是教你以何种方式设计你的代码,如果你掌握类的概念那么你就可以把数据和定义按照类的逻辑分组,这样类就拥有了属性和与之想关联的方法。当你定义一个类之后,你可以创建一个新的类,然后继承之前创建的类的属性和与之相关联的方法,这编程就叫做面向对象编程。
如果你感到迷惑,那么我建议你先不要去学习类,实际上,你并不需要类。但它可以让你的代码减少冗余。下面我们将定义个新的类"Domain"使用"class"关键字,当你实例化Domain类型对象的时候,它的类型有多种方式去定义:
import os
class Domain:
… def init(self, domain, port, protocol):
#通过两个内部变量存储变量
… self.domain=domain
… self.port=port
… self.protocol=protocol
#构造一个url的方法
… def URL(self):
… if self.protocol == ‘https’:
… URL = ‘https://’+self.domain+’:’+self.port+’/’
… if self.protocol == ‘http’:
… URL = ‘http://’+self.domain+’:’+self.port+’/’
… return URL
调用os.system中主机命令lookup去解析域名
… def lookup(self):
… os.system("host "+self.domain)
…
domain=Domain(‘google.com’, ‘443’, ‘https’)
dir(domain)
[‘URL’, ‘doc’, ‘init’, ‘module’, ‘ip’, ‘lookup’, ‘port’, ‘protocol’]domain.URL()
‘https://8.8.8.8:443/’domain.ip
‘8.8.8.8’domain.port
‘443’domain.protocol
‘https’domain.lookup()
google.com has address 74.125.228.233
google.com has address 74.125.228.227
google.com has address 74.125.228.232
正如你所看到的,当你实例化一个Domian类之后你可以运行类中的方法。再次说声,这个概念最初的时候很容易混乱,尤其是当你刚刚Python和编程的时候。尝试一下去实现一个新的类在你的Python脚本里面,我发现这是掌握这个概念最好的途径。
使用sys处理命令行输入值**
最好我们来介绍一下sys模块,sys模块的常见函数列表:
sys.argv: 实现从程序外部向程序传递参数。
sys.exit([arg]): 程序中间的退出,arg=0为正常退出。
sys.getdefaultencoding(): 获取系统当前编码,一般默认为ascii。
sys.setdefaultencoding(): 设置系统默认编码,执行dir(sys)时不会看到这个方法,在解释器中执行不通过,可以先执行reload(sys),在执行 setdefaultencoding('utf8'),此时将系统默认编码设置为utf8。(见设置系统默认编码 )
sys.getfilesystemencoding(): 获取文件系统使用编码方式,Windows下返回'mbcs',mac下返回'utf-8'.
sys.path: 获取指定模块搜索路径的字符串集合,可以将写好的模块放在得到的某个路径下,就可以在程序中import时正确找到。
sys.platform: 获取当前系统平台。
sys.stdin,sys.stdout,sys.stderr: stdin , stdout , 以及stderr 变量包含与标准I/O 流对应的流对象. 如果需要更好地控制输出,而print 不能满足你的要求, 它们就是你所需要的. 你也可以替换它们, 这时候你就可以重定向输出和输入到其它设备( device ), 或者以非标准的方式处理它们
https://www.cnblogs.com/Archie-s/p/6860301.html
下面是一个简单的例子:
执行后:
~$ python sys.py 8.8.8.8 53
[+] The script name is: sys.py
[+] The IP is: 8.8.8.8 and the port is: 53
上面的只是一个例子,大家可以继续去研究其它Python模块,因为它们能够放你用最简单的方式解决你遇到的问题。(每一次作业都告诉我们:多看博客多学习多知道!!!)