函数

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

优点:

  1. 代码重用
  2. 保持一致性
  3. 可拓展性

函数的定义主要有如下要点:

  • def:表示函数的关键字
  • 函数名:函数的名称,日后根据函数名调用函数
  • 函数体:完成函数的具体功能
  • 参数:为函数体提供数据
  • 返回值:当函数执行完毕后,可以给调用者返回数据。

创建一个函数:

def hello():#函数名
    pass #函数体
    return ('Hello !') #返回值
hello()#调用函数

返回值

要想获取函数的执行结果,就可以用return语句把结果返回

注意:

  1. 函数在执行过程中只要遇到return语句,就会停止执行并返回结果,so 也可以理解为 return 语句代表着函数的结束
  2. 如果未在函数中指定return,那这个函数的返回值为None 

 

参数:写在def语句中函数名后面的变量通常就做函数的形参,而调用函数的时候提供的值是实参

我们在定义函数的时候根据需求的不同会用到各种类型的参数,有关键字参数、位置参数、默认参数、可变参数等。

def test(x,y,z):
    print(x)
    print(y)
    print(z)
test(1,2,3)#位置参数
test(x=2,y=3,z=4)#关键字参数
test(5,6,z=8)#位置参数与关键字参数混用,但关键字参数必须放在位置参数后面

#默认参数
def test1(x,y,z=8):
    print(x+y+z)
test1(5,7)
test1(5,8,9)

#可变参数
# *args 会把多传入的参数变成一个元组形式,
#*将一组可变数量的位置参数集合成参数值的元组
def test2(*args):
    print(args)#集合成元组的形式
    print(args[0])
    print(*args)# 去掉元组形式

test2([1,2,3,5],'man','woman')
test2(*('boy',1,4,))


# **kwargs 会把多传入的n多个关键字参数变成一个dict形式
#**可以将关键字参数收集到一个字典当中
def test3(**kwargs):
    print( kwargs)#集合成字典的形式
    print( *kwargs)#all the keys
    print( kwargs['age'])

test3(name='Mike',age='22',sex='male')
test3(**{'name':'Jack','age':30,'sex':'male'})


def test4(args1,args2):
    return args1 ,args2 #return以元组的形式返回
res=test4(2,5)
print(res)

全局与局部变量

在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
当全局变量与局部变量同名时:
在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。
 
num=66 #全局变量
def func():
    num=88 #局部变量 这个变量的作用域就是该函数
    print(num)
func()

>>>88

#除了字符串、数字外,其他像列表、字典、集合、类等这些复杂的数据类型都可以在局部里修改全局变量
name='Li'
name_list=['Mike','Jack','Mar']
def change_name():
    name="chen"
    name_list[0]='二师兄'
change_name()
print(name)
print(name_list)

>>>Li
>>>['二师兄', 'Jack', 'Mar']

嵌套函数 

Python的函数是可以嵌套的,也就是说可以将一个函数放在另一个里面。

def func():
    def hello():
        print("hello!")
    hello()
func()

递归

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

#阶乘
def factorial(n):
    n=int(n)
    if n == 1:
        return 1
else: return n * factorial(n-1) print(factorial(3))

 

递归特性:

1. 必须有一个明确的结束条件

2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少

3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)(递归的最高调用层数为999层)

匿名函数(lambda表达式)

power=lambda x:x*x
print(power(2))

#是不是感觉用lambda也方便不了多少?不过匿名函数主要是和其它函数搭配使用的呢,如下:

result = map(lambda x:x**2,[1,5,7,4,8])
for i in result:
    print(i)

 

高阶函数

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

def add(a,b ,f):
    return f(a)+f(b)
add(2,3,int)

 

内置函数    戳:https://docs.python.org/2/library/functions.html

函数是什么?

 sorted()对一个集合进行排序 :

#!/usr/bin/env/ python
# -*-coding:utf-8 -*-
a={
    1:'chen',10:'alex',5:'li'
}
print(sorted(a))#把key排序后输出
print(sorted(a.items()))#按key排序
print(sorted(a.items(),key=lambda x:x[1]))#按value排序


[1, 5, 10]
[(1, 'chen'), (5, 'li'), (10, 'alex')]
[(10, 'alex'), (1, 'chen'), (5, 'li')]
View Code

相关文章:

  • 2021-08-02
  • 2021-09-29
  • 2020-05-27
  • 2021-05-30
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-06-19
  • 2021-05-26
  • 2022-12-23
  • 2021-07-10
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案