python函数篇
#函数 != function()
#计算机函数 == subroutine 子程序、procedures 过程 、method
定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只要调用其函数名即可
'''作用: 1、减少重复代码 2、方便修改,更易扩展 3、保持代码一致性 '''
import time
def logger(n):
time_format = "%Y-%m-%d %X"
time_current = time.strftime(time_format)
with open("小本本","a") as f:
f.write("%s end action %s \n"%(time_current,n))
def action1(n):
print("Starte writing 1 ...")
logger(n)
def action2(n):
print("Starte writing 2 ...")
logger(n)
def action3(n):
print("Starte writing 3 ...")
logger(n)
print(action1)
print(action2)
print(action3)
下面是函数的简单格式
def f(): print("Hello world")
f() #调用函数的时候一定要加括号
#讲到函数名就不得不提到它的命名规则了:
'''函数名必须以下划线或字母开头,
可以包含任意字母,
数字或下划线的组合,
不能使用任何的标点符号; 函数名是区分大小的; 以及函数名不能是保留字。
'''
举个栗子
def add(x,y): #这里的x,y被称为形参 print(x+y)
add(4,8) #这里的4,8叫做实参、
#悄悄的引用下实参和形参概念
#函数的参数
''' 必须参数 关键字参数 默认参数 不定长参数
'''
必须参数:是指须要用以正确的顺序传入函数,调用时的数量必须和声明时的一样。
def f(name,age):
print("I am %s,my age is %s"%(name,age))
f("ziChuan",21)
f("Leo",22)
关键字参数 指定参数后可以不去考虑顺序
f(name = "ziChuan",age = 21)
f(age = "Leo",age = 22)
默认参数 可以在形参阶段指定参数,若是和具体调用时不符可另作修改(默认参数跟在其他参数后面)
def f(name,age,sex = "boy"):
print("My name is %s,I am %s age and am a %s"%(name,age,sex))
print("ziChuan",21)
print("Anti",20,"girl") #指定sex = girl
不定长参数 *args放左边,*kwargs放右边,关键参数最左边、默认参数、不定参数
def add(*args):
print(args)
sum = 0
for i in args: #args=(1,2,3,4,5)
sum += i
return sum
add(1,2,3,5)
def print_info(*args,**kwargs):
print(args) #("ziChuan",21,"boy")
print(kwargs) #("height":183,"job":"IT","hobby":"girls")
for i in kwargs:
print("%s:%s"%(i,kwargs[i]))
print_info("ziChuan",21,"boy",job="IT",hobby="girls",height=183)
函数返回值
"""return #作用 1、结束函数。2、返回某个对象
def f():
print("Ok")
return 10
#注:如果函数没有return,会默认返回一个None
def foo():
return 1,"zi",{1,2,3}
print(foo())
#注:如果return多个对象,那么python会帮我们返回一个元组
高阶函数
#实现递归实现阶乘效果
def fact(n): if n == 1:
return 1 return n * fact(n-1)
#关于递归的特点:
1、调用自身函数
2、有一个结束条件
#但凡是递归可以写的循环都可以解决
#递归的效率在很多时候会很低
#菲波那切数列
def fibo(n):
before = 0
after = 1
for i in range(n-1):
ret = before + after
before = after
after = ret
return ret
print(fibo(5))
#重要的内置函数
str = ['a','b','c','d']
def fun1(s):
if s != 'a':
return s
ret = filter(fun1,str)
print(ret) #filter objectd 迭代器
print(list(ret)) #ret是一个迭代器对象
对sequence中的item依次执行function(item),将执行结果为True的
item做成一个filter object的迭代器返回,可以看作是过滤函数。
def all(iterable):
for element in iterable:
if not element:
return False
return True
匿名函数
from functools import reduce
print(reduce(lambda x,y : x^y,range(1,6)))
squares = map(lambda x : x ^ x ,range(9))
print(squares)
print(list(squares))