Python(函数)

本文详细介绍了Python函数的基础概念、定义规则、返回值、调用方式、变量作用域等内容,并深入探讨了递归函数、高阶函数、嵌套函数及装饰器等高级特性。

一.函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数

1.编程分类

面向对象:—类(class)
面向过程:—过程(def)没有返回值的函数称为过程
函数式编程中:—函数(def)
在Python不区分函数和过程,过程也有返回值,不过返回值为Null

2.定义函数的规则

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
  • 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
  • 函数内容以冒号起始,并且缩进。 return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

Python 定义函数使用 def 关键字

#Author:橘春二三
 def hello():    #def定义函数
 	print("hello world")
hello()     #调用函数

3.函数返回值

(1)返回函数值
(2)终止函数

#Author:橘春二三 
def test1():    #定义函数
	print("in the test1")    
	return 0   #函数返回值为0,此时函数结束
	print("test end")    #此句不会输出
	
x = test1()   #将函数的值给x
print(x)  #输出x的值即函数的返回值

返回值类型

当没有返回值时,返回0。
当返回值时一个特定值时,返回这个值。
当返回值是多个值时,返回的是一个元组
当返回值是一个函数名时,返回的是函数的内存地址。
当返回值是一个函数时,返回的是函数的执行结果。
例:

#Author:橘春二三 
def test1():   
	 print("in the test1")
	 
def test2():    
	print("in the test2")    
	return 0
	
def test3():    
	print("in the test2")    
	return 1,"hello",["dajiang","dajiangliu","xxxx"],{"jingling:shibachai"}
	
def test4():    
	print("in the test3")    
	return test1
	
x = test1()
y = test2() 
z = test3() 
w = test4()
print(x) 
print(y) 
print(z) 
print(w)

执行结果:
in the test1
in the test2
in the test3
in the test3
None
0
(1, ‘hello’, [‘dajiang’, ‘dajiangliu’, ‘xxxx’], {‘jingling:shibachai’})
<function test1 at 0x0000019239987730> 存储地址

4.函数调用

  • 实参,形参
  • 关键参数
  • 位置参数
#Author:橘春二三
def test(x,y):  #形参    
	print(x)    
	print(y)
#test("x","y")  #位置实参调运,形参和实参是一一对应 #test(y=2,x=3)   
#关键字参数调运,与形参位置无关。
test(x=2,3)     #关键参数不能写在位置参数之前。 
#test(3,y=2)   #位置参数和关键字参数同时存在,以位置参数调运为主

(1)位置实参调运,形参和实参是一一对应
(2)关键字参数调运,与形参位置无关。
(3)关键参数不能写在位置参数之前。
(4)位置参数和关键字参数同时存在,以位置参数调运为主。

  • 默认参数
    默认参数的特点:调运函数的时候,默认参数非必须传递 用途:参数在不修改其值的情况下,使用默认值
#Author:橘春二三
def test(x,y=2):    
	print(x)    
	print(y)     
test(1,3)

*args : 接受N个位置参数,转化成元组的形式
**kwargs :接受N个关键字参数,转化成字典的形式

def test(x,y,*args):    
	print(x)    
	print(y)    
	print(args)     
test(1,3,4,5,6,7,8,9,) 
test(*[1,2,2,4,5,7,])
def test(**kwargs):    
	print(kwargs)     
test(name='anliu',age=8,sex='F') 
test(**{'name':"anliu","age":18})
#把N个关键字参数,转换为字典的形式

5.变量

  • 局部变量
    仅在函数内部有效
def change_name(name):    
	print("before change",name)    
	name = "Auliu"   #局部变量,这个函数就是变量的作用域    
	print("after change",name)
name = "anliu" 
change_name(name) 
print(name)

输出结果为:
before change anliu
after change Auliu
anliu

  • 全局变量
    全局变量在程序内均有效
    一般函数内不能修改全局变量的值
school = "xiyunkeji"  #全局变量 
def change_name(name):    
	school = "baiyijishu"  #在函数内是不能修改全局变量的值    
	print("before change",name,school)    
	name = "Auliu"   #局部变量,这个函数就是变量的作用域    
	print("after change",name)
 name = "anliu" 
 change_name(name) 
 print(name,school)

输出结果:
before change anliu baiyijishu
after change Auliu
anliu xiyunkeji

定义global之后,全局变量也是可以在函数内修改的

6.递归函数

在函数内部,可以调运其他函数。如果一个函数在内部调运自身,这个函数就是递归函数。
例:

def calc(n):    
	print(n)    
	if int(n/2) > 0:        
		return calc(int(n/2))    
	print("-->",n)     
calc(10)

输出结果:
10
5
2
1
–> 1

7.高阶函数

变量可以指向函数,函数的参数支持能接受变量,那么一个函数就可以接受另一个函数作为参数,这种 函数就称之为高阶函数。

高级函数特性:
(1)把一个函数名当做实参传递给另一个函数
(2)返回值中包含函数名

#Author:橘春二三 
def add(a,b,f):    
	return f(a) + f(b)
x = add(1,-6,abs) 
print(x)

abs()是python自带的一个函数,把它当作实参传递给了自定义函数add()

8.嵌套函数

在一个函数体内定义另外一个函数

def foo():    
	print("in the foo ")    
	def bar():        
		print("in the bar")    
	bar() 
foo()

输出结果:
in the foo
in the bar

9.装饰器

定义:装饰器:装饰器本质是函数,(函数是有特定的功能),装饰器的功能就是装饰其他函数,就是 为其他函数添加附加功能。
原则:1.不能修改被装饰函数的源代码。
2.不能修改被装饰的函数的调运方式。 (装饰器对被装饰函数来说是透明的)

装饰器=高阶函数+嵌套函数

#装饰函数
def decorator(foo):
    def wrapper():
    	print 'wrapper'
        return foo()
    return wrapper
#自定义函数
def abc():
    print 'abc'
 #装饰abc
 abc = decorator(abc)

以上就是装饰器的过程,可以看出调用decorator函数,返回的是wrapper函数对象,而不是abc这个函数对象

abc这个函数在wrapper中已经是被调用了的,只是返回一个结果。可以看出装饰之后的abc是wrapper的函数对象,而不是原来函数了。

python解释题给我们提供了一个“语法糖”,我们可以使用“语法糖”来实现

def decorator(foo):
	def wrapper():
        print 'wrapper'
        return foo()
    return wrapper
 @decorator
def abc():
    print 'abc'

python的装饰器语法就是自动调用decorator函数,并以自定义的函数abc函数对象为参数,
返回wrapper函数对象,这样一个过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值