python—函数实例三

简介:

1.查询模块:按目录依次查找需要导入的模块,模块目录一般在:/usr/lib64/python2.7

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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(),一般加在目录列表最后

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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/' ]


方法二:修改环境变量,一般加在目录列表前面

1
2
vim  /root/ .bashrc    # 加入 export PYTHONPATH=/root/python
source  /root/ .bashrc   # 刷新


例子:统计一个文件,行数、单词数、字符数(和wc命令相同效果)

说明:为了避免使用split切割之后,最后多出一个空字符串,而使用count()

1
2
3
4
5
6
7
8
9
10
#/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" )
=  file1.read()
count(s)


3.脚本形式,导入模块,脚本名字不能是数字,会产生一个编译文件

例子:

1
2
#!/usr/bin/env python
import  wc

说明:目录下生产编译文件:wc.pyc



4.py和wc.py的__name__内置变量不一样,前者是wc,或者是__main__,修改wc.py,执行自己时,输出自己的结果,被调用时,执行不显示源结果:

wc.py:

1
2
3
4
5
6
7
8
9
10
11
#/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" )
     =  file1.read()
     count(s)

test.py:

1
2
3
4
#!/usr/bin/env python
import  wc
=  open ( "/root/python/10.py" , "r" ).read()
wc.count(s)

5.包的形式,导入模块

四种导入方法:在包目录dir下创建一个__init__.py空文件

方法一:

1
2
from  dir  import  wc
wc.count( "abc" )


方法二:

1
2
import  dir .wc
dir .wc.count( "abc" )


方法三:

1
2
from  dir .wc  import  count
count( "abc" )


方法四:别名

1
2
from  dir .wc  import  count as count
count( "abc" )


6.面向对象编程:python、java、C++;面向过程编程:C、函数式编程、shell

类的(静态)属性:(人类的五官,理解为变量)

类的(动态)方法:(人类吃穿住行,理解为一个函数)

对象:类的实例化,之后才能有属性和方法



7.类的创建

类的方法中,至少有一个参数self

调用属性时,不带括号

调用方法时,使用括号;方法调用属性时,至少有一个self参数

属性调用其他方法:类名.属性名


例子:

1
2
3
4
5
6
7
8
9
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.私有属性在定义的类中的内部函数中被调用

例子:

1
2
3
4
5
6
7
8
9
10
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.外部调用私有属性(格式:实例化名._类名属性名),一般只是测试用

例子:

1
2
3
4
5
6
7
8
9
10
11
12
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:私有方法调用

1
2
3
4
5
6
7
8
9
10
11
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:动态方法调用

1
2
3
4
5
6
7
8
9
10
11
12
13
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,,调用时会报错),加载关于这个类的所有东西

1
2
3
4
5
6
7
8
9
10
11
12
13
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:加装饰器,只对下面的一个函数起作用,就可以使用类的方法调用了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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.定义内部类

方法一:

1
2
3
4
5
6
7
class  People():
     color  =  "yellow"
     __age  =  27
     class  Chinese( object ):      # 定义内部类
         country  =  "I am chinese"
hzp  =  People.Chinese()       # 外部类.内部类实例化
print  hzp.country                 # 实例化后,调用内部类的属性


方法二:

1
2
3
4
5
6
7
8
class  People():
     color  =  "yellow"
     __age  =  27
     class  Chinese( object ):
         country  =  "I am chinese"
hzp  =  People()                   # 先外部类实例化
hzp2  =  hzp.Chinese()        # 再内部类实例化
print  hzp2.country


方法三:

1
2
3
4
5
6
7
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:

1
2
3
4
5
6
7
8
9
10
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
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:


1
2
3
4
5
6
7
8
9
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










本文转自 huangzp168 51CTO博客,原文链接:http://blog.51cto.com/huangzp/2047412,如需转载请自行联系原作者
目录
相关文章
|
1月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
169 1
|
1月前
|
算法 Java Docker
(Python基础)新时代语言!一起学习Python吧!(三):IF条件判断和match匹配;Python中的循环:for...in、while循环;循环操作关键字;Python函数使用方法
IF 条件判断 使用if语句,对条件进行判断 true则执行代码块缩进语句 false则不执行代码块缩进语句,如果有else 或 elif 则进入相应的规则中执行
259 1
|
1月前
|
Java 数据处理 索引
(numpy)Python做数据处理必备框架!(二):ndarray切片的使用与运算;常见的ndarray函数:平方根、正余弦、自然对数、指数、幂等运算;统计函数:方差、均值、极差;比较函数...
ndarray切片 索引从0开始 索引/切片类型 描述/用法 基本索引 通过整数索引直接访问元素。 行/列切片 使用冒号:切片语法选择行或列的子集 连续切片 从起始索引到结束索引按步长切片 使用slice函数 通过slice(start,stop,strp)定义切片规则 布尔索引 通过布尔条件筛选满足条件的元素。支持逻辑运算符 &、|。
155 0
|
2月前
|
设计模式 缓存 监控
Python装饰器:优雅增强函数功能
Python装饰器:优雅增强函数功能
268 101
|
2月前
|
缓存 测试技术 Python
Python装饰器:优雅地增强函数功能
Python装饰器:优雅地增强函数功能
209 99
|
2月前
|
存储 缓存 测试技术
Python装饰器:优雅地增强函数功能
Python装饰器:优雅地增强函数功能
186 98
|
2月前
|
缓存 Python
Python中的装饰器:优雅地增强函数功能
Python中的装饰器:优雅地增强函数功能
|
3月前
|
Python
Python 函数定义
Python 函数定义
491 155
|
4月前
|
PHP Python
Python format()函数高级字符串格式化详解
在 Python 中,字符串格式化是一个重要的主题,format() 函数作为一种灵活且强大的字符串格式化方法,被广泛应用。format() 函数不仅能实现基本的插入变量,还支持更多高级的格式化功能,包括数字格式、对齐、填充、日期时间格式、嵌套字段等。 今天我们将深入解析 format() 函数的高级用法,帮助你在实际编程中更高效地处理字符串格式化。
540 0
|
2月前
|
算法 安全 数据安全/隐私保护
Python随机数函数全解析:5个核心工具的实战指南
Python的random模块不仅包含基础的随机数生成函数,还提供了如randint()、choice()、shuffle()和sample()等实用工具,适用于游戏开发、密码学、统计模拟等多个领域。本文深入解析这些函数的用法、底层原理及最佳实践,帮助开发者高效利用随机数,提升代码质量与安全性。
613 0