python 学习系列--任务3(函数,类以及sys模块等)

本次任务主要内容:
python脚本基础概念,涉及函数,类以及sys模块。

0x01 Python脚本框架

声明main()函数和自定义函数,学习编码声明的方式和main函数执行的方式。

Python使用缩进对齐组织代码的执行,所有没有缩进的代码(非函数定义和类定义),都会在载入时自动执行,这些代码,可以认为是Python的main函数。为了区分主执行文件还是被调用的文件,Python引入了一个变量name,当文件是被调用时,name的值为模块名,当文件被执行时,name为’main‘

新建一个hello.py脚本

# -*- coding:utf-8 -*-  
import os   
def foo():    #自定义函数
    str='hhhhhh'    #函数功能实现
    print(str)      #函数功能实现
print(__name__)         #输出:__main__
def main():             #声明main()
    foo()
if __name__=="__main__":   
    main()     #main()先执行
    foo()
#_name_是当前模块名,当模块被直接运行时模块名为_main_

执行结果:
在这里插入图片描述
为更好理解,建一个world.py调用hello模块

# -*- coding:utf-8 -*-  
import hello
print(hello.__name__)   #输出hello的名字
print(__name__)         #输出world脚本的名字__main__

执行结果:
在这里插入图片描述
hello.py调用前后的name发生了变化,在定义的hello.py里,name是main,而在被调用之后,name变为hello。

0x02 函数

声明一个函数

def Function():
  str='Joyeuse saint-valentin'
  print(str)

函数调用

# -*- coding:utf-8 -*-  
import os
def Function():
  str='Joyeuse saint-valentin'
  print(str)
def main():
  output = Function()
  print "Espèce de salaud"
if __name__=="__main__":   
  main()

执行结果:

$ python sys.py
Joyeuse saint-valentin
Espèce de salaud

0x03 Python类

类(Class): 用来描述具有相同的属性和方法的对象的集合,它定义了该集合中每个对象所共有的属性和方法,对象是类的实例。

新建一个lei.py脚本,使用class创建类

import os
class Domain:#类名

def __init__(self, domain, port, protocol):
#定义一个方法,除第一个参数self外,其他和普通函数一样
       self.domain=domain
       self.port=port
       self.protocol=protocol
  
    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
         
    def lookup(self):
       os.system("host "+self.domain)
#数据封装,面向对象编程的一个重要特点
#封装数据的函数是和类本身是关联起来的,称之为类的方法

创建实例,通过类名+()实现的,在终端python环境下,依次输入:

import lei
dom=lei.Domain('google.com', '443', 'https')
#创建Domain类的一个实例dom
dir(dom)
#要调用一个方法,只需要在实例变量上直接调用
dom.URL()
dom.ip#找不到ip呃
dom.port
dom.protocol
dom.lookup()

执行结果:
在这里插入图片描述
类是建实例的模板,实例是具体的对象,各实例的数据可不相同,通过在实例变量上调用方法,可直接操作对象内部的数据。

关于类的继承

继承是指面向对象编程 (OOP) 语言的一个主要功能:它可以使用现有类的所有功能,在无需重新编写原来的类的情况下对这些功能进行扩展。

继承的定义:

class human(object):   # 定义一个父类
    def saying(self):    # 父类中的方法
        print("La personne parle")   
class person(human):    # 定义一个子类, 继承human类
    def walk(self):      # 在子类中定义其自身的方法
        print('babababab...')
a = person()
a.saying()      # 调用继承的human类的方法
a.walk()     # 调用本身的方法

输出:

La personne parle
babababab...

0x04 使用sys处理命令行输入值

sys模块,可以读取从命令终端输入的值并且可以引入到脚本里面。
sys.argv:传递给Python脚本的命令行参数列表。argv[0]是脚本名(是否为完整路径名取决于操作系统)。如果使用解释器的-c命令行选项执行命令,argv[0]被设置为字符串“-c”。如果没有将脚本名称传递给Python解释器,那么argv[0]就是空字符串。

实践操作一下:

import sys
print sys.argv[0]
print sys.argv[1]
print sys.argv[2]

运行结果:

$ python sys.py argv1  argv2
sys.py 
argv1  
argv2

sys模块的其他内容

①sys.exit(n)
执行到主程序末尾,解释器自动退出,如果需要中途退出,可以调用sys.exit函数,带有一个可选的整数参数返回给调用它的程序,0是正常退出。

import sys
print sys.argv[0]
print sys.argv[1]
sys.exit(0)
print sys.argv[2]

运行结果:

$ python sys.py argv1  argv2
sys.py 
argv1  

②sys.path
功能:获取指定模块搜索路径的字符串集合,可以将写好的模块放在得到的某个路径下,就可以在程序中import时正确找到。

>>> import sys
>>> sys.path
['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat
-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk',
'/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/
-dynload', '/usr/local/lib/python2.7/dist-packages'
'/home/antoine/libc', '/usr/lib/python2.7/dist-pack
ages']
>>> 

③sys.stdin\stdout\stderr
stdin 、stdout 、stderr 变量包含与标准I/O 流对应的流对象。当print 不能满足要求, 可以重定向输出和输入到其它设备( device ), 或者以非标准的方式处理它们。

④sys.platform
获取当前系统平台。

>>> sys.platform
'linux2'
>>> 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值