创建一个函数
通过def关键字可以创建一个函数
def addNumber(firstNumber,secondNumber) :
return firstNumber + secondNumber
print "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 sum
print 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 + strTwo
print funDefaultParam() # 输出: helloworld
print funDefaultParam(strTwo="xiaoming") #指定参数对应的是那个型参 输出:helloxiaoming
print funDefaultParam(strOne="nihao",) # 输出: nihaoworld
使用global语句改变全局变量的值
#可以使用global语句,在函数体中,改变全局变量的值
number = 22
def changeNumber():
global number
number = number + 2
return number
print "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:
xxxx
except Exception as e:
print e
这样的形式捕获异常
也可以向java那样,手动抛出异常,在python中使用raise关键字:
raise RuntimeError("raise an exception")
捕获异常
from symbol import except_clause, if_stmt
from locale import str
try:
file = open("/local/temp/no.txt")
for line in file:
print line
except 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-8
def 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 + 1
b = [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 False
b = ["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 realNumberHex
f = 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函数的时候,在执行之前和执行之后,分别打印了字符串
创建一个函数,使用@测试
@decorSayHello
def sayHello(name):
print "hello :"+name
sayHello("tset")
decor_first.png