python学习(二)函数

来源:互联网 发布:网络电视选择哪个信源 编辑:程序博客网 时间:2024/04/29 02:59

创建一个函数

通过def关键字可以创建一个函数

def addNumber(firstNumber,secondNumber) :    return firstNumber + secondNumberprint "addNumber(2, 3) = "+str(addNumber(2, 3))    #输出: addNumber(2, 3) = 5

另外系统为我们提供了很多函数,我们可以在命令行下通过help()来查看其功能和需要的参数
这里写图片描述

可变参数

def changeArgs(* args):    sum = 0    for x in args:        sum = sum + x;    return sumprint changeArgs(1,3,6,9)  # 输出: 19

使用元组来返回多个值

在python中,我们可以使用元组来返回多个值

def addAndLess(firstNumber,secondNumber):    return (firstNumber + secondNumber,firstNumber - secondNumber)addResult , lessResult = addAndLess(22,11)print "addResult is :"+str(addResult) + "      lessResult is :"+str(lessResult)   #输出:addResult is :33      lessResult is :11

python中默认的参数

在python中,可以给函数提供一个默认值,如果没有传入参数,则使用该默认的参数

def funDefaultParam(strOne = "hello",strTwo = "world"):    return strOne + strTwoprint funDefaultParam()  # 输出: helloworldprint funDefaultParam(strTwo="xiaoming") #指定参数对应的是那个型参   输出:helloxiaomingprint funDefaultParam(strOne="nihao",)   # 输出:  nihaoworld

使用global语句改变全局变量的值

#可以使用global语句,在函数体中,改变全局变量的值number = 22def changeNumber():    global number    number = number + 2    return numberprint "changeNumber():"+str(changeNumber()) # 输出: changeNumber():24

python中的数据类型转换

print int("11")print float("22")print bool("1")print bool("")

这里写图片描述

方法重新命名

另外可以为一个指定的方法重新命名,然后可以直接调用

selfMax = max;print selfMax(44,77)

python中的迭代和循环

使用range函数来创建个列表,默认的间隔是1

print range(1,10) # [1, 2, 3, 4, 5, 6, 7, 8, 9]

间隔为3,创建一个1-10的列表

print range(1,10,3)  # [1, 4, 7]

for语句迭代循环

在python中,可以使用for语句迭代循环各种对象。包括字符串,列表,字典,和文件

#遍历字符串a = "get away here"for x in a :    print x#遍历列表b = ["aaa","bbb","ccc"]for x in b :    print x#遍历字典c = {     11 : "one",     "name" : 22     }for x in c :    print c[x]

python中的异常

在python中和java是一样的,如果程序出现异常,那么可以捕获异常,在python中,可以使用:

try:    xxxxexcept Exception as e:    print e

这样的形式捕获异常

也可以向java那样,手动抛出异常,在python中使用raise关键字:

raise RuntimeError("raise an exception")

捕获异常

from symbol import except_clause, if_stmtfrom locale import strtry:    file = open("/local/temp/no.txt")    for line in file:        print lineexcept IOError as e:    print "没有找到文件"

主动抛出异常

def devideMethod(numberOne,numberTwo):    if numberTwo == 0:        raise RuntimeError("被除数不能是0")    else :        print "the result is :"+str(numberOne / numberTwo)devideMethod(5,0)

这里写图片描述

python中的对象

在python中使用的所有的值都是对象

通过dir()函数来列出某个对象的所有可用的方法

items = ["aaa","bbb","ccc"]print dir(items)"""['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__',  '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__',  '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']"""

python创建类

#创建一个具有加法和sayhello功能的类class MyClass(object):    def __init__(self,name):        self.name = name    def addNumber(self,numberOne,numberTwo):        print numberOne + numberTwo    def say(self, sex):        if sex == "man" :            print self.name + "先生"        elif sex == "woman":            print self.name + "女士"myClass = MyClass("小明")myClass.addNumber(22,33)myClass.say("woman")

这里写图片描述

python静态方法

#在python中也可以写上向java中的静态方法,需要在方法名之前加上@staticmethod这样的关键字class MyStaticClass(object):    @staticmethod    def staticSayHello():        print "hello world"MyStaticClass.staticSayHello()

函数的文档

#coding=utf-8"""如果模块、类或者函数定义的第一条语句是一个字符串,那么这个字符串就成为了其文档可以通过这样的方式来查看其文档:"""def sayHello():    """这是方法的文档,用来说明方法的功能"""    print "hello world..."print sayHello.__doc__

python中的模块

在python中,同样和java一样,当文件很多的时候,可以将这些文件放入到一个文件夹里边,然后使用import关键字来导入这些文件,为了说明问题,这里我在同一个包下创建两个文件
这里写图片描述

  • add.py
#coding=utf-8def sayHello():    print "hello world"def sayName(realName):    print "your name is :"+realName
  • userAdd.py
"""在python中,同样和java一样,当文件很多的时候,可以将这些文件放入到一个文件夹里边,然后使用import关键字来导入这些文件比如:import add这是使用add.py文件中的sayHello方法,就可以这样写:add.sayHello()"""add.sayHello()"""当然可以为import进来的模块给一个自己喜欢的名字:import add as jia"""jia.sayHello()"""如果我只想导入add.py中的sayName方法,可以这样写:from add import sayName此时可以直接运行该方法sayName("李四")"""sayName("李四")"""可以将add.py模块中的所有方法都导入:from add import *"""sayHello()sayName("张三")print dir(add)  #['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'sayHello', 'sayName']

列表生成式

# 列表生成式,下面以x变量为基础,生成x * x 作为值print [x * x for x in range(1,10) if x % 2 == 0]  # 输出: [4, 16, 36, 64]

将函数作为参数

另外其实在python中函数也是变量,因此我们可以将函数也作为参数来传递

def add(x, y, f):    return f(x) + f(y)print add(-3,8,abs)

map和reduce

#map接收两个参数,第一个是一个函数,第二个是一个可遍历类型的参数def addOne(x):    return x + 1b = [11,22,33,44]b = map(addOne, b)print b  #输出: [12, 23, 34, 45]#reduce把一个函数作用在一个序列上,这个函数必须是两个参数,reduce把结果继续和序列的下一个元素做累积计算def addNumber(x,y):    return x + y;b = [1,2,3,4]b = reduce(addNumber,b)print b

filter函数

filter函数和map函数有点相似,都是将一个函数用作一个序列,但是filter会根据序列中的每一个元素作为该filter的参数,如果返回true,则保留,否则丢弃

#判断一个字符串中是否包含ab字符串def filterString(str):    if str.find("ab") != -1:        return True    else:        return Falseb = ["abc","adb","ddd","abbb"]b = filter(filterString,b)print b  # 输出: ['abc', 'abbb']

sorted函数

#python默认提供sorted函数用于为一个序列进行排序,比如:print sorted([0,-2,-3,-4,7,9,45])  # 输出: [-4, -3, -2, 0, 7, 9, 45]#另外sorted()函数还可以接收一个key函数来实现自定义的排序,例如按绝对值大小排序print sorted([0,-2,-3,-4,7,9,45],key=abs)  # 输出:[0, -2, -3, -4, 7, 9, 45]

返回函数

在上面的学习中,发现了,可以将函数作为参数来传递,其实就是变量的传递,这里同样可以将函数作为返回值,比如我们写一个函数,实现元素的二次方

def numberHex(x):    def realNumberHex():        return x * x    return realNumberHexf = numberHex(3)print f()   # 输出: 9 

匿名函数

lambda表示匿名函数# x表示匿名函数的输入参数b = map(lambda x: x * x, [0,-2,-3,-4,7])print b  # 输出: [0, 4, 9, 16, 49]    

python装饰器

python装饰器有点类似于java中的spring AOP,android中的hook,即在函数运行时,动态为其增加功能

创建一个装饰器,用来装饰当前函数

def decorSayHello(func):    def innerSay(name):        print "before say hello, we need to meet"        func(name)        print "after say hello, we need to say bye"    return innerSay

可以看到,这里在执行传递进来的func函数的时候,在执行之前和执行之后,分别打印了字符串

创建一个函数,使用@测试

@decorSayHellodef sayHello(name):    print "hello :"+namesayHello("tset")decor_first.png
0 0
原创粉丝点击