设为首页 收藏本站
查看: 849|回复: 0

[经验分享] python—函数实例三

[复制链接]

尚未签到

发表于 2018-8-5 09:29:48 | 显示全部楼层 |阅读模式
  1.查询模块:按目录依次查找需要导入的模块,模块目录一般在:/usr/lib64/python2.7
In [2]: sys.path  
Out[2]:
  
['',
  
'/usr/bin',
  
'/usr/lib64/python2.7/site-packages/MySQL_python-1.2.5-py2.7-linux-x86_64.egg',
  
'/usr/lib64/python27.zip',
  
'/usr/lib64/python2.7',
  
'/usr/lib64/python2.7/plat-linux2',
  
'/usr/lib64/python2.7/lib-tk',
  
'/usr/lib64/python2.7/lib-old',
  
'/usr/lib64/python2.7/lib-dynload',
  
'/usr/lib64/python2.7/site-packages',
  
'/usr/lib/python2.7/site-packages',
  
'/usr/lib/python2.7/site-packages/python_memcached-1.58-py2.7.egg',
  
'/usr/lib/python2.7/site-packages/IPython/extensions',
  
'/root/.ipython']
  2.自定义模块目录
  方法一:sys.path.append(),一般加在目录列表最后
In [3]: sys.path.append("/root/python/")  
In [4]: sys.path
  
Out[4]:
  
['',
  
'/usr/bin',
  
'/usr/lib64/python2.7/site-packages/MySQL_python-1.2.5-py2.7-linux-x86_64.egg',
  
'/usr/lib64/python27.zip',
  
'/usr/lib64/python2.7',
  
'/usr/lib64/python2.7/plat-linux2',
  
'/usr/lib64/python2.7/lib-tk',
  
'/usr/lib64/python2.7/lib-old',
  
'/usr/lib64/python2.7/lib-dynload',
  
'/usr/lib64/python2.7/site-packages',
  
'/usr/lib/python2.7/site-packages',
  
'/usr/lib/python2.7/site-packages/python_memcached-1.58-py2.7.egg',
  
'/usr/lib/python2.7/site-packages/IPython/extensions',
  
'/root/.ipython',
  
'/root/python/']
  方法二:修改环境变量,一般加在目录列表前面
vim /root/.bashrc   # 加入 export PYTHONPATH=/root/python  
source /root/.bashrc  # 刷新
  例子:统计一个文件,行数、单词数、字符数(和wc命令相同效果)
  说明:为了避免使用split切割之后,最后多出一个空字符串,而使用count()
#/usr/bin/env python  
def count(s):
  
    char = len(s)
  
    words = len(s.split())
  
    lines = s.count("\n")
  
    print lines,words,char
  

  
file1 = open("/etc/passwd","r")
  
s = file1.read()
  
count(s)
  3.脚本形式,导入模块,脚本名字不能是数字,会产生一个编译文件
  例子:
#!/usr/bin/env python  
import wc
  说明:目录下生产编译文件:wc.pyc
  
  4.py和wc.py的__name__内置变量不一样,前者是wc,或者是__main__,修改wc.py,执行自己时,输出自己的结果,被调用时,执行不显示源结果:
  wc.py:
#/usr/bin/env python  
def count(s):
  
    char = len(s)
  
    words = len(s.split())
  
    lines = s.count("\n")
  
    print lines,words,char
  

  
if __name__ == "__main__":
  
    file1 = open("/etc/passwd","r")
  
    s = file1.read()
  
    count(s)
  test.py:
#!/usr/bin/env python  
import wc
  
s = open("/root/python/10.py","r").read()
  
wc.count(s)
  5.包的形式,导入模块
  四种导入方法:在包目录dir下创建一个__init__.py空文件
  方法一:
from dir import wc  
wc.count("abc")
  方法二:
import dir.wc  
dir.wc.count("abc")
  方法三:
from dir.wc import count  
count("abc")
  方法四:别名
from dir.wc import count as count  
count("abc")
  
  6.面向对象编程:python、java、C++;面向过程编程:C、函数式编程、shell
  类的(静态)属性:(人类的五官,理解为变量)
  类的(动态)方法:(人类吃穿住行,理解为一个函数)
  对象:类的实例化,之后才能有属性和方法
  
  7.类的创建
  类的方法中,至少有一个参数self
  调用属性时,不带括号
  调用方法时,使用括号;方法调用属性时,至少有一个self参数
  属性调用其他方法:类名.属性名
  例子:
class People():  
    color = "yellow"
  
    def think(self):                # 加上self表示是类的方法,不加则表示函数
  
        self.color = "black"    # 加上self表示是类的属性
  
        print ("My color is %s "% (self.color))
  

  
ren = People()         # 类的实例化
  
print ren.color          # 类的属性外部调用
  
ren.think()               # 类的方法外部调用,如加上print,则多一个默认return值none
  运行结果:
  yellow
  My color is black
  8.私有属性在定义的类中的内部函数中被调用
  例子:
class People():  
    color = "yellow"
  
    __age = 27
  
    def think(self):
  
        self.color = "black"
  
        print self.__age                         # 内部函数调用类的私有属性,外部函数不能直接调用
  
        print ("My color is %s "% (self.color))
  
ren = People()
  
print ren.color
  
ren.think()
  9.外部调用私有属性(格式:实例化名._类名属性名),一般只是测试用
  例子:
class People():  
    color = "yellow"
  
    __age = 27
  
    def think(self):
  
        self.color = "black"
  
        print self.__age
  
        print ("My color is %s "% (self.color))
  

  
ren = People()
  
print ren.color
  
ren.think()
  
print ren._People__age          # 外部调用私有属性
  10.类的方法
  公有方法:内部和外部都可以调用
  私有方法:内部函数调用
  动态方法:classmethod()函数处理,没有被调用的类的其他参数不会加载进内存中
  静态方法:
  方法的定义和函数一样,但是需要把self作为第一个参数,如果还是有其他参数,继续加上;类实例化之后,采用“类名.方法名()”调用
  例子1:私有方法调用
class People():  
    color = "yellow"
  
    __age = 27
  
    def __think(self):
  
        self.color = "black"
  
        print self.__age
  
        print ("My color is %s "% (self.color))
  
    def test(self):
  
        self.__think()           # 类的私有方法调用
  
ren = People()
  
ren.test()                        # 类的私有方法调用
  例子2:动态方法调用
class People():  
    color = "yellow"
  
    __age = 27
  
    def __think(self):
  
        self.color = "black"
  
        print self.__age
  
        print ("My color is %s "% (self.color))
  
    def test(self):
  
        print ("Testing...")
  
    cm = classmethod(test)        # 动态方法定义
  

  
ren = People()
  
ren.cm()                                   # 动态方法调用
  例子3:静态方法调用:
  类函数不带self参数,该函数使用staticmethod()函数处理(如果不处理,缺少self,,调用时会报错),加载关于这个类的所有东西
class People():  
    color = "yellow"
  
    __age = 27
  
    def __think(self):
  
        self.color = "black"
  
        print self.__age
  
        print ("My color is %s "% (self.color))
  
    def test():                                 #  内部函数,不带self
  
        print ("Testing...")
  
       #print People.color              # 因为没有self,不能调用该类的属性
  
    cm = staticmethod(test)          # 静态方法定义
  
ren = People()
  
ren.cm()                                     # 静态方法调用
  例子4:加装饰器,只对下面的一个函数起作用,就可以使用类的方法调用了
class People():  
    color = "yellow"
  
    __age = 27
  
    def __think(self):
  
        self.color = "black"
  
        print self.__age
  
        print ("My color is %s "% (self.color))
  

  
    @classmethod                 # 加装饰器,可以通过类来调用
  
    def test(self):                   # 动态方法,带self
  
        print ("Testing...")
  

  
    @staticmethod               # 加装饰器
  
    def test1():                     # 静态方法,不带self
  
        print ("Testing1..")
  

  
ren = People()
  
People.test()                 # 类的方法调用
  
People.test1()               # 类的方法调用
  11.定义内部类
  方法一:
class People():  
    color = "yellow"
  
    __age = 27
  
    class Chinese(object):     # 定义内部类
  
        country = "I am chinese"
  
hzp = People.Chinese()      # 外部类.内部类实例化
  
print hzp.country                # 实例化后,调用内部类的属性
  方法二:
class People():  
    color = "yellow"
  
    __age = 27
  
    class Chinese(object):
  
        country = "I am chinese"
  
hzp = People()                  # 先外部类实例化
  
hzp2 = hzp.Chinese()       # 再内部类实例化
  
print hzp2.country
  方法三:
class People():  
    color = "yellow"
  
    __age = 27
  
    class Chinese(object):
  
        country = "I am chinese"
  
print People.Chinese.country                # 类的方法
  
print People.Chinese().country             # 相当于People.Chinese()实例化,最后调用属性
  12.构造函数和析构函数
  构造函数用于初始化类的内部状态,提供的函数是__init__(),不给出则会提供默认方法
  析构函数用于释放占用的资源,提供的函数是__del__(),不给出则会提供默认方法
  1)__str__(self):只能使用return,不能使用print,无需调用和打印,会自动调用
  例子1:
class People():  
    color = "yellow"
  
    __age = 27
  
    class Chinese(object):
  
        country = "I am chinese"
  
    def __str__(self):                # 定义__str__(self)
  
        return("This is a test")    # return返回结果,不能使用print
  

  
ren = People()
  
print ren                                # 类实例化后,自动调用
  运行结果:
  This is a test
  2)__init__():初始化值,不需调用,实例化后,自动执行,也可以传值
  例子2:
class People():  
    color = "yellow"
  
    __age = 27
  
    class Chinese(object):
  
        country = "I am chinese"
  
    def __str__(self):
  
        return("This is a test")
  
    def __init__(self):
  
        self.color = "black"
  

  
ren = People()
  
print ren.color           # 实例化后,变成“black”
  
print People.color     # 类直接调用,color值不变
  运行结果:
  black
  yellow
  3)__del__():在脚本最后执行,释放资源;如果没有析构函数释放资源,也没关系,python通过gc模块,实现垃圾回收机制
  例子3:
class People():  
    def __init__(self):         # 构造函数,打开文件
  
        print("Initing...")
  
        self.fd = open("/etc/hosts","r"):
  
    def __del__(self):       # 析构函数,关掉文件
  
        print("End")
  
        self.fd.close()
  
ren = People()
  
ren
  运行结果:
  Initing...
  End

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-546799-1-1.html 上篇帖子: 【Python】01、Python简介 下篇帖子: Python创建daemon
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表