Python_day3:函数

一、函数

  1、函数的基本语法及特性

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

    特性:减少重复代码;使程序变得可扩展;使程序变得易维护。

1 def hello():  #定义用def
2     print("hello world")
3 
4 hello()  #直接调用

  带参数如下:

1 def calc(x,y):  #x,y为形参
2     res = x+y
3     return res #返回函数执行结果
4  
5 c = calc(a,b) #结果赋值给c变量;a,b为实参
6 print(c)

  2、参数与变量

  形参:只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量

  实参:可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值。

  2.1、位置参数

1 def people(name,age,sex,country):
2     print("name",name)
3     print("age",age)
4     print("sex",sex)
5     print("country",country)
6 people("a",16,"M","CN")
7 people("b",15,"F","CN")

位置参数必须一一对应,若有相同参数,可设默认参数,但必须在位置参数之后,如:

def people(name,age,sex,country="CN"):
    pass
people("c",18,"M") #country不传为默认CN,指定后为你所传的参数

  2.2、关键参数

people("d",sex="M",age=17) #位置参数在前,关键参数在后,可颠倒顺序,每个形参只能传一个实参

  2.3、非固定参数

  当需要传递的参数较多,可使用非固定参数:*args;**kwargs

def people(name,*args,**kwargs):
    pass
people("e",19,"F",country="CN")
#输出:"e",(19,"F"),{country:"CN"}
#位置参数传给*args,以元组形式展现;关键参数传给**kwargs,以字典形式展现.

  2.4、局部变量与全局变量

 1 name = "A" #这儿为全局变量
 2  
 3 def change_name(name):
 4     print("before change:",name)
 5     name = "a"  #这儿为局部变量
 6     print("after change:", name)
 7  
 8 change_name(name)
 9  
10 print("最后的name:",name)
11 #输出:
12 before change:"A"
13 after change:"a"
14 最后的name:"A"
15 #namely,局部变量只在它定义的子程序中起作用,全局变量在全局起作用.

  3、匿名函数

1 #这段代码
2 def calc(n):
3     return n**n
4 print(calc(10))
5  
6 #换成匿名函数
7 calc = lambda n:n**n
8 print(calc(10))

  4、嵌套函数

name = "A" 
def change_name():
    name = "B"
    def change_name2():
        name = "C"
        print("第3层打印",name)
    change_name2() #调用内层函数
    print("第2层打印",name)
change_name()
print("最外层打印",name)

  5、高阶函数

1 def add(x,y,f):
2     return f(x) + f(y)
3 res = add(1,-1,abs)
4 print(res)
5 #即:把一个函数作为参数传给另一个函数

  6、递归函数 

 1 def calc(n):
 2     print(n)
 3     if int(n/2) ==0:
 4         return n
 5     return calc(int(n/2))
 6 calc(10)
 7 #输出:
 8 10
 9 5
10 2
11 1

递归特性:

1. 必须有一个明确的结束条件,保护机制无限循环最多999次;

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

3. 递归效率不高,递归层次过多会导致栈溢出。

  7、内置参数

 

  更多:This

 

转载于:https://www.cnblogs.com/alpari-wang/p/9732554.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值