学习python内一般函数知识

函数

目录

一、函数定义

二、函数编写说明文档

三、函数的返回值

四、函数参数

1、位置参数与关键字参数

2、默认参数

3、可变长参数

4、可变关键字参数

五、作用域

1、全局变量

2、局部变量

3、global关键字

4、内嵌函数与 nonlocal关键字

5、闭包

6、递归

7、lambda匿名函数

一、函数定义

In [17]:
def info_1(a,b,c):
    print(a)
    print(b)
    print(c)
In [20]:
info_1(1,2,3) # 赋值调用,这样就可以重复调用

1
2
3

二、函数编写说明文档

def test(a,b):  # test的函数解释就是‘用来实现两个数的求和’
    '''
    用来实现两个数的求和
    '''
    print(a+b)

三、函数的返回值

def abs_1(x):          # return返回一个值,下面的程序就不会执行
    if x >=0:
        return(x)
    else:
        return(-x)
In [32]:
abs_1(-444)
Out[32]:
444     

四、函数参数

1、位置参数与关键字参数

# 位置参数
In [53]:
def test(a,b,c):
    print(a)
    print(b)
    print(c)

In [54]:
test(1,2,3)  # 1,2,3分别对应a,b,c

1
2
3
# 关键字参数
In [57]:
test(a=2,b=1,c=3)

2
1
3

关键字参数必须放在位置参数后⾯

使⽤名称指定的参数,有助于澄清各个参数的作⽤。这样,函数调⽤不再像下⾯这样怪异⽽神秘。
使⽤关键字参数使每个参数的作⽤清晰明了。另外,参数的顺序错了也没关系。
另外,关键字参数最⼤的优点还在于可以指定默认值。

2、默认参数

def test(a,b,c=1):
    print(a)
    print(b)
    print(c)

In [64]:
test(b=1,a=2) # c=1是默认参数

2
1
1

必选参数在前,默认参数在后,否则会报错。
默认参数降低了函数调⽤的难度,⽽⼀旦需要更复杂的调⽤时,⼜可以传递更多的参数来实现。⽆
论是简单调⽤还是复杂调⽤,函数只需要定义⼀个。

3、可变长参数

in[76]:
def sum_2(*x_list):  # 在参数前面加个*
    n=0
    for i in x_list:
        n+=i
    return n

In [77]:
sum_2(3,4,5,1,2,3,4,5,1,2,3)

Out[77]:
33

4、可变关键字参数

⼀个星号不会收集关键字参数,要收集关键字参数,可使⽤两个星号。

⼀个星号就是打包成元组传⼊进来,两个星号就是打包成字典传⼊进来。

In[79]:
def test(**x): # 在参数前加两个*
    return x

In [80]:
test(a=1,b=2,c=3,d=4)   

Out[80]:
{'a': 1, 'b': 2, 'c': 3, 'd': 4}

五、作用域

1、全局变量和局部变量

# 全局作用域
a=1

# 局部作用域  n= 0即为局部变量
def test_1(*args):
    n=0
    for i in args:
        n+=i*i
    return n

在函数外边定义的变量叫做全局变量
全局变量能够在所有的函数中进⾏访问
如果在函数中修改全局变量,那么就需要使⽤global进⾏声明,否则出错
如果全局变量的名字和局部变量的名字相同,那么使⽤的是局部变量的,⼩技巧:强⻰不压地头蛇

2、global关键字

# global关键字,全局变量不可变时使用
a=100
def test5():
    global a  # 调用全局变量
    a+=1
    print(a)
test5()

3、内嵌函数与 nonlocal关键字

def outer():
     num = 10
     def inner():
         nonlocal num    # nonlocal关键字声明
         num = 100
         print(num)
     inner()
     print(num)
outer()

100
100

4、闭包

In [111]:
def funcX(x):
     def funcY(y):
         return x *y
     return funcY

In [112]:
funcX(1)(2)

Out[112]:
2

5、递归

在程序上,递归实质上是函数调⽤⾃身的⾏为。

# 递归
def caljie(n):
    if n>1:
        result = n* caljie(n-1)
    else:
        result=1
    return result

In [131]:
caljie(3)
Out[131]:
6

6、lambda匿名函数

①基本语法

⽤lambda关键词能创建⼩型匿名函数,这种函数得名于省略了⽤def声明函数的标准步骤。
lambda函数的语法只包含⼀个语句。

In [148]:
f = lambda x:x*2 if x>5 else x/2    # else不能省略 可用else none
f(3)

Out[148]:
1.5

②使用场景

函数作为参数进⾏传递

Lambda函数能接收任何数量的参数,但只能返回⼀个表达式的值
匿名函数不能直接调⽤print,因为lambda需要⼀个表达式

把函数功能屏蔽

import time

time.sleep(10) # 让程序休眠10秒
print('------zZZ-------')

③作为高级函数的参数

a、map

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

In [152]:
list(map(lambda x:x*2+10, a))

Out[152]:
[12, 14, 16, 18, 20, 22, 24, 26, 28, 30]

b、filter

In[153]:
def f(x):
     if x % 2==0:  #  函数⽤于过滤序列
         return x
   
list(filter(f,a))

Out[153]:
[2, 4, 6, 8, 10]

c、sorted

In[159]:
sorted(a, key=lambda x: abs(5 - x))   #对所有可迭代的对象进⾏排序操作。

Out[159]:
[5, 6, 4, 4, 3, 3, 2, 8, 2, 1, 1, 10, 22, 55, 77]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值