博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学习python内一般函数知识
阅读量:2240 次
发布时间:2019-05-09

本文共 2805 字,大约阅读时间需要 9 分钟。

函数

目录

一、函数定义

二、函数编写说明文档

三、函数的返回值

四、函数参数

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) # 赋值调用,这样就可以重复调用123

二、函数编写说明文档

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,c123
# 关键字参数In [57]:test(a=2,b=1,c=3)213

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

使⽤名称指定的参数,有助于澄清各个参数的作⽤。这样,函数调⽤不再像下⾯这样怪异⽽神秘。

使⽤关键字参数使每个参数的作⽤清晰明了。另外,参数的顺序错了也没关系。
另外,关键字参数最⼤的优点还在于可以指定默认值。

2、默认参数

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

必选参数在前,默认参数在后,否则会报错。

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

3、可变长参数

in[76]:def sum_2(*x_list):  # 在参数前面加个*    n=0    for i in x_list:        n+=i    return nIn [77]:sum_2(3,4,5,1,2,3,4,5,1,2,3)Out[77]:33

4、可变关键字参数

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

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

In[79]:def test(**x): # 在参数前加两个*    return xIn [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=100def 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()100100

4、闭包

In [111]:def funcX(x):     def funcY(y):         return x *y     return funcYIn [112]:funcX(1)(2)Out[112]:2

5、递归

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

# 递归def caljie(n):    if n>1:        result = n* caljie(n-1)    else:        result=1    return resultIn [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 nonef(3)Out[148]:1.5

②使用场景

函数作为参数进⾏传递

Lambda函数能接收任何数量的参数,但只能返回⼀个表达式的值

匿名函数不能直接调⽤print,因为lambda需要⼀个表达式

把函数功能屏蔽

import timetime.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]

转载地址:http://dxqbb.baihongyu.com/

你可能感兴趣的文章
什么是TPS,什么是QPS,区别是什么?
查看>>
git pull遇到错误:error: Your local changes to the following files would be overwritten by merge:
查看>>
arraylist扩容时机java8
查看>>
logback中additivity的理解
查看>>
一篇文章搞懂hash,hashcode,equals,==的用法
查看>>
mysql数据库,悲观锁。for update 的用法。
查看>>
springboot+jta+atomikos多数据源和 springboot+mybatisplus+aop实现数据库读写分离而引发的一些思考
查看>>
java面试中常考的一些面试sql语句
查看>>
一个字节等于多少位?
查看>>
帧框架frameset的用法总结
查看>>
java1.8中创建hashmap的初始化大小设置标准
查看>>
mark一下,service的实现层没有加@service注解。
查看>>
jq对象转换成js对象。已经jq的复合选择器。
查看>>
(一)alin‘s mysql学习笔记----概述
查看>>
(二)alin’s mysql学习笔记----mysql的存储引擎
查看>>
(三)alin’s mysql学习笔记----常用的join连接查询
查看>>
(四)alin’s mysql学习笔记----索引简介
查看>>
分布式系统中的幂等性的理解
查看>>
spring的注解开发中的常用注解(一)------@bean @Configuration @ComponentScan @Import @Scope @Lazy
查看>>
(五)alin’s mysql学习笔记----索引性能分析
查看>>