python基础语法之【函数一】

目录

1、什么是函数

2、函数的分类

3、函数的定义

4、函数调用

5、函数参数

6、参数传递方式

7、函数返回值(return)

8、函数作用域

9、闭包函数

10、函数装饰器


1、什么是函数

1、函数是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集。

2、函数支持重复调用,多处调用,有效加强代码的复用性,提高程序编写的效率。

2、函数的分类 

1、内置函数(Python3解释器中内置了69个常用函数,属于底层的函数,它们到处可用)

2、自定义函数()根据自己的需求,自定义函数来实现功能,并方便后期反复调用

Python的内置函数

1

数学相关

abs / divmod / pow / round / min / max / sum

2

序列相关

len / range / next / filter / map / sorted / slice / reversed

3

类型转换

chr / ord / str / bool / int / float / complex / bin / oct / hex

4

数据结构

dict / list / set / tuple

5

其他函数

all / any / id / input / open / print / type

print(chr(0x91d1))
print(hex(ord('金')))
print(abs(-1.2345))
print(round(-1.2345))
print(pow(1.2345, 5))
fruits = ['orange', 'peach', 'durian', 'watermelon']
print(fruits[slice(1, 3)])
fruits2 = list(filter(myfilter, fruits))
print(fruits)
print(fruits2)

3、函数的定义

函数必须先创建才可以使用,该过程称为函数定义。函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
函数使用原则:必须先定义,后调用。由此衍生出来一个知识点:函数在定义阶段只检测函数语法,不执行函数

def add(a, b):#有参函数
    return a + b

def foo(): #无参函数
    print('不依赖于外部传入的值执行函数内部代码块的为无参函数。')

 def top():
     pass    #占位符,代表什么也不做,这样的函数叫空函数

 4、函数的调用

调用语法:函数名()   #在python中必须先定义后调用
函数调用过程:先找到函数名,通过函数名调用函数内部代码

 5、 函数参数

概念:函数中的参数起到了传递数据的作用,函数调用者可以通过函数参数把函数内部需要的数据从外部传递过去。
实参和形参:#形参即变量名,实参即变量值,函数调用时,将值绑定到变量名上,函数调用结束,解除绑定

6、函数参数传递方式 

可以使用:def foo(*args,**kwargs):来接受传入的任意参数  (*args和**kwargs只是个通俗的命名约定,不是关键字)

"""

函数的参数
	- 默认参数
	- 可变参数
	- 关键字参数
	- 命名关键字参数

Version: 0.1
Author: jasn
Date: 2019-12-23

"""

# 参数默认值
def f1(a, b=5, c=10):
	return a + b * 2 + c * 3

print(f1(1, 2, 3))
print(f1(100, 200))
print(f1(100))
print(f1(c=2, b=3, a=1))

# 可变参数
def f2(*args):
	sum = 0
	for num in args:
		sum += num
	return sum

print(f2(1, 2, 3))
print(f2(1, 2, 3, 4, 5))
print(f2())

# 关键字参数
def f3(**kw):
	if 'name' in kw:
		print('欢迎你%s!' % kw['name'])
	elif 'tel' in kw:
		print('你的CSDN博客是: %s!' % kw['boke'])
	else:
		print('没找到你的个人信息!')

param = {'name': '金鞍少年', 'age': 18}
f3(**param)
f3(name='金鞍少年', age=18, boke='http://jasn67.blog.csdn.net')
f3(user='金鞍少年', age=18, boke='http://jasn67.blog.csdn.net')
f3(user='金鞍少年', age=18, boke='http://jasn67.blog.csdn.net')

7、函数的返回值

什么是返回值:return将return后面的部分作为返回值:作为函数的输出,可以用变量接走,继续使用该返回值做其它事。
为什么需要用到返回值:
调用函数,经过一系列操作,最后需要一个明确的结果,则需要返回值(见代码)
指定返回值和隐形返回值:函数体中 return 语句有指定返回值时返回的就是其值,如果没声明return则默认返回None。
返回值类型:无论定义的是返回什么类型,return 只能返回单值,但值可以存在多个元素(如:字典、函数体、元组等)

#最大公约数    #一般函数体进行数据运算时,都需要用到返回值
def gcd(x,y):
    if x<y:
        (x,y)==(y,x)
    for i in range(x,1,-1):
        if x%i==0  and y%i==0:
            return i
    return 1

print('函数的返回值为:',gcd(15, 27))


#无需明确结果的时候,函数体基本上不用返回值
def foo():
    print('通常无参函数不需要有返回值')


print(foo())   #函数体无定义return,输出None。

8、函数作用域

 

9、闭包函数

闭包的特点:就是内部函数引用了父函数体内的变量(支持多重查找)
闭包的作用:保存外部函数内的变量,不会随外部的使用完而销毁。----提高代码重用性

9.1 闭包函数三要素

  1. 闭包函数必须有内嵌函数

  2. 闭包函数必须引用外层函数的变量

  3. 闭包函数返回内嵌函数的地址(函数名称)

def otter(name='jasn'):  # 内部定义的变量可以由外部传入
    # name = 'jasn'
    def inner():  # 父函数包了个内层函数
        print(name)  # 子函数引用了父函数的变量
        print(inner.__closure__)  # (cell at 0x0000000001DEEDC0: function object at 0x000000000249A4C0>,)
    # 使用:___closure__内置属性判断是否是一个闭包,打印出来有cell,就说明是一个闭包

    return inner  # 父函数返回子函数的地址

f = otter()  # 用f变量来接收inner函数的地址
f()  # 调用inner()函数

 9.2 判断闭包函数的方法

__closure__内置属性 ,见代码用法

10、函数修饰器

概念:在不修改原函数代码,不影响其他用户调用函数的前提下实现功能的增加
本质:就是闭包函数的运用
原则:对修改封闭,对拓展开放(不修改原函数的前提下,方便的增加函数功能)

# 1、无参装饰器用法
# 装饰器
def timmer(func):
    def innner():
        start=time.time()
        func()
        stop=time.time()
        print('本次运行时间为 %s'%(stop-start))
    return innner
#原程序
# @功能又叫语法糖 注:
# 距离函数最近的装饰器先先装饰,自内而外。
@timmer  # foo=timmer(func) 将修饰后的结果赋值给foo()
def foo():
    time.sleep(2)
    print('欢迎使用装饰器')
foo()


#2、有参、有返回值装饰器
def Home_time(func):
    def annal(*args,**kwargs):
        res=func(*args,**kwargs)
        print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
        return res
    return annal

@Home_time
def home(name):
    print('welcome %s to home'%name)
    return name

home('jasn')
发布了46 篇原创文章 · 获赞 37 · 访问量 4540

猜你喜欢

转载自blog.csdn.net/weixin_42444693/article/details/103674698