Python之函数应用

来源:互联网 发布:英雄在美国的票房数据 编辑:程序博客网 时间:2024/06/06 03:16


1、创建函数


def fun():    print('这是一个简单的函数')
cont = 10def outer():    global cont     # 函数内部要修改全局变量时    cont = 5    print(cont)    outer()print(cont)

2、递归函数

递归函数最好不要使用,可以用循环实现。因为递归层次过多会导致栈溢出,出现无法预知的错误

def fun(n):    if n == 1:        return 1    return n+fun(n-1)       # 用递归实现100以内的书累加print(fun(100))


3、闭包函数


def ou():    x = 10    def inr():          # 闭包函数:引用外部环境的变量        print(x)    return inr()ou()


4、装饰器函数


#! -*- encoding:utf-8 -*-import timedef show_time(func):        # 装饰器函数定义    def inner():        # 内部函数实现在原来基础上增加功能        star = time.time()        func()              # 此处是传进来的函数名,执行该函数        end = time.time()        print(end - star)    return inner            # 注意:这里只返回内部函数的函数名(内存地址)而不是执行结果@show_time          # @ 是装饰器的固定用法 意义:foo = show_time(foo)def foo():    print('foo...')    time.sleep(2)@show_time          # @ 是装饰器的固定用法 意义:bar = show_time(bar)def bar():    print('bar...')    time.sleep(3)foo()           # 执行一个函数必须在后面加小括号

#! -*- encoding:utf-8 -*-import timedef logger(flag=''):        # 在原来的基础上再传一个参数进来    def show_time(func):        # 装饰器函数定义        def inner():        # 内部函数实现在原来基础上增加功能            star = time.time()            func()              # 此处是传进来的函数名            end = time.time()            print(end - star)            if flag=='true':                t = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())                print(t)        return inner            # 注意:这里只返回内部函数的函数名(内存地址)而不是执行结果    return show_time    # 返回内层函数名(对象)@logger('true')     # @ 是装饰器的固定用法 意义:foo = logger('true')(foo)def foo():    print('foo...')    time.sleep(2)@logger()         # @ 是装饰器的固定用法 意义:bar = logger()(bar)def bar():    print('bar...')    time.sleep(3)foo()           # 执行一个函数必须在后面加小括号# foo...# 2.0008480548858643# 2017-12-04 19:27:39


5、函数参数


def fun(name, age='20', *list, **dict):    # 参数位置顺序:关键参数 ,默认参数, 不定长无键参数, 不定长有键参数

  • 关键参数:调用函数时,指定要传进来的固定参数
  • 默认参数:该参数在你调用函数时有一个默认的值
  • 不定长无键参数(动态参数):可以存在多个值,常见传一个列表。传到函数里会成为一个元组类型。
  • 不定长有键参数(动态参数):可以传一个键值对。传进函数会成为一个字典类型。

#!/usr/bin/env python# -*- coding:utf-8 -*-def f(*args):       # *args 在这里是一个标准写法    print(args, type(args))f(['1', '2', '3', '4'])     # 这里会把列表当成一个参数,传进函数里也是元组里的一个值   (['1', '2', '3', '4'],) <class 'tuple'>f(*['1', '2', '3', '4'])     # 这里就相当于把列表里的值for循环一个一个传进函数里。跟形参有对应关系。 ('1', '2', '3', '4') <class 'tuple'># ——————————————————————————————————————————————————————————————def g(**kwargs):      # **kwargs 在这里是一个标准写法    print(kwargs, type(kwargs))di = {'name': 'liujun', 'age': '23', }# g(di)     # 这里是语法错误,不能直接传一个字典变量进去。g(k1 = di)   # 只能传键值对{'k1': {'name': 'liujun', 'age': '23'}} <class 'dict'>g(**di)     # 这里才是传一个原本的字典,也是跟形参有对应关系  {'name': 'liujun', 'age': '23'} <class 'dict'>


6、函数返回值


def p():    print('这是一个函数;')    # return 123ret = p()print(ret)     # 函数内部如果不指定返回值,会默认返回一个 None

函数只要执行了return 就会退出函数运行。





原创粉丝点击