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))

 

posted @ 2019-07-15 00:23  MTcx  阅读(142)  评论(0编辑  收藏  举报