python学习之路(七)

今天更新一下有关于函数的知识点~

函数是什么?

函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,具体区别,编程中的函数在英文中也有很多不同的叫法。在BASIC中叫做subroutine(子过程或子程序),在Pascal中叫做procedure(过程)和function,在C中只有function,在Java里面叫做method。

函数分为面向对象,面向过程和函数式编程。

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

特性:

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

语法定义

def name() :   #name 是函数名称
    print("hello world")
    return 0     #返回值可有可无,可以是任何值或者函数或者表达式,可以是任何东西,不写的话返回NONE

name()

 

当然,函数是可以传参数的,比如下面:

def asd(x,y):  #xy都是形参
    print(x,y)
asd(1,2)   #1,2是实参
asd(x=1,y=2)
asd(1,y=2)
以上三种传参方法都是正确的,但需要注意的是第三种方法,位置参数是必须要优先的,如果写成asd(2,x=1)程序是不会把2传给y的。

还有一种方法是传默认参数,多用于设置默认值或者连接数据库端口号,这种相当于设定了初始值,如果想修改也能修改。

def test(x,y=8080):
    print(x,y)

test (443)
结果是输出 443,8080
如果是
test(443,80)
那么输出就是 443,80

函数不光可以传单个参数,也可以传参数组,可以用元祖或者字典去传值,方法如下:

def test(*args):   #*args将接收的N个数值转换成元祖,放在元祖中传值
    print(args)
test(1,2,3,4,5)

def test(**kwargs): #这是将字典传入函数
  print(kwargs['name'])
test(name='xiaoming',age=22)
结果是xiaoming

不光可以传入单一类型的值,还能组合传入:

def test(name,age=18,*args,**kwargs):
    print(name,age,args,kwargs)
test('xiaoming',24,1,2,3,4,sex='man')

局部变量和全局变量

在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
当全局变量与局部变量同名时:
在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。
简而言之,全局变量就是在程序顶部写的,局部变量
 
嵌套函数和递归
 
嵌套函数
name = "xiaoming"
 
def change_name():
    name = "xiaowang"
 
    def change_name2():
        name = "xiaofang"
        print("第3层打印",name)
 
    change_name2() #调用内层函数
    print("第2层打印",name)
 
 
change_name()
print("最外层打印",name)

递归

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

ef calc(n):
    print(n)
    if int(n/2) ==0:
        return n
    return calc(int(n/2))
 
calc(10)
 
输出:
10
5
2
1

递归特性:

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

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

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

匿名函数:

匿名函数就是不需要显式的指定函数,匿名函数主要是和其它函数搭配使用。如下面所示

def calc(n):
    return n**n
print(calc(10))
 
#换成匿名函数
calc = lambda n:n**n
print(calc(10))

内置函数:

python中有很多已经写好的函数,可以直接调用。

具体操作方法请见:https://docs.python.org/3/library/functions.html?highlight=built#ascii

  

原文地址:https://www.cnblogs.com/lovelyming/p/7258114.html