python笔记---day3

函数

定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,想要执行这个函数的时候,只需要调用函数名即可。

特性

  1. 减少重复代码
  2. 使程序变得可扩展
  3. 使程序变得容易维护

语法定义

#定义
def sayhi():
        print("Hello Word! I'm a coolboy !")

#调用
sayhi()
sayhi()

 

带参数:

#定义
def calc(x,y):
    res=x*y
    return res

#调用使用
c=calc(10,4)
print(c)

 

 默认参数

#默认参数
def stu_refister(name,age,course,country="CN"):
    print("注册信息".center(20,'-'))
    print("姓名:", name)
    print("年龄:" ,age)
    print("国籍:", country)
    print("课程:", course)

stu_refister("金角大王",34,'python')
stu_refister("银角大王",14,'USA','linux')

 

执行结果

--------注册信息--------
姓名: 金角大王
年龄: 34
国籍: CN
课程: python
--------注册信息--------
姓名: 银角大王
年龄: 14
国籍: linux
课程: USA

我们在网站上注册用户,像国籍这种信息,你不填写,默认就会是 中国, 这就是通过默认参数实现的,把country变成默认参数非常简单。

关键参数

正常情况下,给函数传参数要按顺序,不想按顺序就可以用关键参数,只需指定参数名即可,但记住一个要求就是,关键参数必须放在位置参数之后。像上面的默认参数就是一个关键参数。

 

非固定参数

若你的函数在定义时不确定用户想传入多少个参数,就可以使用非固定参数

*args:  接收N个位置参数,转换成元祖形式

def stu_register(name,age,*args):  # *args 会把多传入的参数变成一个元组形式
    print(name,age,args)


执行:
stu_register('张勇',23,'CN' ,'python')

输出:
张勇 23 ('CN', 'python')

还可以有一个**kwargs

# *kwargs 接收N个关键字参数,转换成字典的形式

 

def test(**kwargs):
    print(kwargs)

test(name='zhangyong',age='19',job='IT')

执行结果:
{'name': 'zhangyong', 'age': '19', 'job': 'IT'}


固定参数结合
def test(name,**kwargs):
    print(kwargs)

test(name='zhangyong',age='19',job='IT')

执行结果
{'age': '19', 'job': 'IT'}

另外一种写法:
def test(**kwargs):
    print(kwargs)

test(**{'name':'zhangyong','age':23,'job':'IT'})

结果:
{'name': 'zhangyong', 'age': 23, 'job': 'IT'}

取字典其中的值

def test(**kwargs):
    print(kwargs['name'])
    print(kwargs['age'])

test(**{'name':'zhangyong','age':23,'job':'IT'})

结果
zhangyong
23

 

高阶函数

高阶函数:一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),满足其一则为高阶函数。

 1. 参数为函数

import time
#定义第一个bar的函数
def bar():
    print ("hello~~")
    time.sleep(3)
    print("In the bar")


#定义第二个test的函数
def test(func):
    func()
print("In the test")
#调用test函数,将bar作为一个实参传入到test。。test函数里面执行这个bar test(bar)

代码的升级版:

用test函数 计算bar函数 运行花费时间,不改变bar的源代码  和输出。

import time
def bar():
    print ("hello~~")
    time.sleep(3)
    print("In the bar")

def test(func):
    start_time=time.time()
    func()
    stop_time=time.time()
    print("the bar run time is %s"%(stop_time - start_time))
test(bar)

 

2.返回值包含函数名

def bar():
    time.sleep(3)
    print("in the bar")


def test(func):
    print('增加一个功能')
    return func                  #返回test(bar)的内存地址, 有内存地址之后 可以随便赋值给其他变量调用


bar=test(bar)    #从新覆盖一下bar的变量
bar()

#相当于实现了一个简单的装饰器,不改变源代码,不改变源代码的调用方式。 给源代码增加了一个新功能

 

     

posted @ 2018-12-06 13:51  会飞的鱼·  阅读(161)  评论(0编辑  收藏  举报