python作为一个面向对象的语言,也有类似java等面向对象语言相同的数据结构(class)的定义,和代码块数据结构定义“函数”。为了极大可能的简化代码调用逻辑和书写规则,python中对于函数和类的定义与使用也是及其简单的。函数也可以称作方法的定义使用有两种:一种是通过关键字def定义函数格式,另一种是通过lambda构建一个匿名函数。类的定义主要是通过关键字class定义完成,具体类相关的内容会在下面总结.

Python中的函数

python中函数的使用可以分为两种,若仔细研究会发现还有一种类似类型(列表解析),但其更像一个表达式。如下一一总结:

  • lambda

python中可以通过lambda表达式来构建一个简单的单行匿名函数。其结构简单,使用轻便,但功能也及其有限。其格式如下:


multi=lambda x,y:x*y #lambda关键字定义,以':'分割,左边为参数列表,右边为返回结果的表达式
print multi(2,3)

如上为一个简单的lambda形式创建的函数模式,可以通过其计算两个数的积,对于这类较为简单的计算可以直接使用lambda创建一个建议的函数实现。

def定义的函数可以完成较为复杂的工作,其定义格式如下



#定义格式
def [function_name]([parameter list]):
'the function introduction' #注释文档,作为文档说明使用
[statement] #缩进排版,确定代码块 #示例
def function(var1,var2="test"):
'only print parameter.'
print var1,var2 help(function)
function("need","help")
function(var2="var2",var1="var1")
function("var1") #result Help on function function in module __main__: function(var1, var2='test')
only print parameter. need help
var1 var2
var1 test

如上,给出了函数的定义格式和示例代码,python中的函数调用参数不需要指定类型,函数以”:”开始进行逻辑实现,函数头部和函数体之间需要使用缩排来分割。上面的代码给出了三种调用方式,正好反映了函数的三个调用特性(个人总结,说词可能有点不太准确,但意思达到):

  1. 调用参数顺序调用

    一般的调用方式,也是较为常见的调用

  2. 指定参数名调用

    python中调用函数可以通过指定参数的函数指定参数值来调用函数,如:


function(var2="var2",var1="var1") #这样可以更加容易的了解参数对应的含义,前提得是个好名字.
  1. 选择调用s

    python方法中可以指定参数的默认值,若不需要修改参数值的话可以省略对该参数的调用,使用见上示例最后一个调用。

python中的类

python中的类和一般的面向对象语言没什么太大的区别,具有一般类的基本特性:封装抽象多态继承 特性。和其他语言不同的是python中的类有两种类型的类:新式类和旧式类,在python2.x中默认创建的类为旧式类,python3.x默认茶ungjian的是新式类。

类的定义

类的定义和函数类似,需要使用一个关键字“class”来定义,定义语法结构如下:


class className:
[statement]

如此就是一个类的定义,一个类中存在很多元素构成,如下为一个类的使用的示例,参考示例来了解类的成员类型:

class TestClass:   #类的定义
DESCRIPTION = "class introduction" # 类变量,可直接通过类名调用
__test = "test" # 属于私有,不可在类外部直接调用以“__”开头
_single = "single" # 属于私有,不可使用from module import *导入使用 def __init__(self,name):
'测试类' #注释文档
self.name=name #通过self可以创建类的实例变量
print TestClass.__test
print TestClass._single def getName(self): #类的成员方法
return self.name def __getName(self): #类的私有方法
return TestClass._single @staticmethod
def getsingele(): #类的静态方法
return TestClass.__test print TestClass.DESCRIPTION
print TestClass.getsingele()
test=TestClass("hfcai")
print test.name
print test.getName()
print TestClass.getName(test) #result class introduction
test
test
single
hfcai
hfcai
hfcai
  • 构造方法

实例化类(类的创建)需要通过调用其构造函数来实例化,python中的实例化会自动调用类的构造方法init(),可以通过指定init方法参数来实例化对象,同时需要注意的是一个类中只能有一个init函数。

  • 类的实例变量

    python 中的类的实例化对象的创建需要通过self来创建,实例化对象完成后也可以通过类的变量进行调用

  • 类的实例方法

    类的实例方法和普通的python函数类似,唯一不同的是类的成员犯法的参数列表首个参数必须是self,该方法的调用可以通过类的实例直接调用,不需要对首个self进行传递,默认为实例本身,也可以通过类名直接调用,但需要给self传值,参数为当前类的实例。

  • 类的静态方法

    类的静态方法需要通过@@staticmethod定义,从次下一行开始定义方法(和函数相同).调用可以直接通过类名调用。

  • 类的变量

    类似于java中的静态变量,需要通过类名调用

需要注意的是类的私有熟悉,类中所有以” _ ” 开头的方法、参数,均不可在类的外部直接调用,所有以“ ” 开头的方法、参数均不可使用

“from module import * ” 来直接调用.

新式类和旧式类

新式类是从python 2.2开始引入,python2.x默认创建的都是旧式类,python3.x默认创建的都是新式类。新式类是继承自object,其功能是为了保证class和type的统一,使用实例的class属性和type(实例)会返回相同的结果,但旧式类不一定。新式类对于多重继承的搜索算法进行了修改。对于python2.x来说想要定义形式类可以通过如下两种方法:

  • 继承object

直接显式继承自object可创建新式类

  • * metaclass = type *

    直接在类的声明前添加“metaclass = type”

如下示例:


#!/usr/bin/env python
# -*-encoding:utf-8 -*- class A: #旧式类
def __init__(self):
print "classic type." class B(object): #新式类
def __init__(self):
print "new style type. one" __metaclass__ =type
class C: #新式类
def __init__(self):
print "new style type. two" a=A()
b=B()
c=C()
print "class A __class__:%s,type:%s \n"% (a.__class__,type(a))
print "class B __class__:%s,type:%s \n"% (b.__class__,type(b))
print "class C __class__:%s,type:%s \n"% (c.__class__,type(c)) #result
classic type.
new style type. one
new style type. two
class A __class__:__main__.A,type:<type 'instance'>
class B __class__:<class '__main__.B'>,type:<class '__main__.B'>
class C __class__:<class '__main__.C'>,type:<class '__main__.C'>

如上发现,只有A的_class_ 和type(a)不同。

Enjoytoday

最新文章

  1. PHP常用函数、数组方法
  2. VPN使用指南|稳定的VPN|
  3. the import javax.servlet
  4. ios layer 动画-(transform.rotation篇)
  5. LinqToSql和ASP.NET Entity FrameWork 中使用事务
  6. D3D中深度测试和Alpha混合的关系
  7. 01.C语言关于结构体的学习笔记
  8. POJ 2186 Popular Cows(Tarjan)
  9. js 中对象属性的特性
  10. pyqt一个简单的动画
  11. ubuntu经常使用的命令摘要
  12. 更改MYSQL数据库不区分大小写表名
  13. Too Much Money
  14. ip地址与整数相互转换
  15. Oracle EBS BOM模块常用表结构
  16. ISCC 2018(数字密文)
  17. Nginx配置CI框架问题(Linux平台下Centos系统)
  18. win10jdk环境变量配置问题:&#39;javac&#39; 不是内部或外部命令,也不是可运行的程序 或批处理文件。
  19. linux 图形化与命令模式切换
  20. leetcode python 003

热门文章

  1. 机器学习-Python 01
  2. Thymeleaf语法
  3. luogu P4064 [JXOI2017]加法
  4. tableview封装使用
  5. tensorflow word2vec详解
  6. xshell连接问题记录
  7. 新安装mariadb远程登陆配置及相关问题排查
  8. quick start guide for XMEGA ADC
  9. Django day03之表设计分析
  10. C# 中获取一个目录下的目录与文件