一、函数引入

函数其实就是一种工具,和你敲钉子用的锤子没有任何区别

你在用锤子敲钉子的时候首先需要有一把锤子,使用函数也是一样,你需要先定义一个函数,才能使用这个函数。

你定义了一个函数,需要使用它的时候只需要叫他的名字就行了。比用锤子方便多了。

二、函数的定义

什么是函数?

函数就是一种工具

三、如何定义一个函数

def 函数名():
'''对函数(工具)的描述信息'''
代码块

函数定义过程中,只检测语法,不执行代码

调用阶段,才会执行代码

四、定义函数的三种形式

1、空函数

def func():
'''空函数就是只有pass的函数,没有代码,更没有参数'''
pass

2、有参函数

def guess(x,y):
'''给定两个数,打印较大的数'''
if x > y:
return x
else:
return y
# 通俗的说,就是括号内有东西,这些东西就是参数,他们本质上是一些变量名

3、无参函数

def guess():
'''给定两个数,打印较大的数'''
x = 30
y = 20
if x > y:
return x
else:
return y
# 通俗的说,就是括号内没东西,就是没有参数

五、函数的调用

函数的调用就是使用函数,只需要直接调用函数的函数名就可以了

def guess():
"""给定两个数,打印较大的数""" x = 20
y = 30
if x > y:
print(x)
else:
print(y) guess() # 这里就把函数成功调用了

六、函数的返回值

返回值:就是返回一个值(可以是所有数据类型),就是指return后面的内容

def guess():
"""给定两个数,打印较大的数"""
# return
# print(1)
x = 20
y = 30
if x > y:
# print(x)
return x
else:
# print(y)
return y

return的特性:

  1. return 返回一个返回值,如果没有返回值,返回None
  2. 没有return 默认返回None
  3. return 会终止函数,不运行下面的代码,假设有多个return的时候,运行到第一个就会结束,不会运行第二个
  4. return 通过逗号隔开,可以返回多个值,返回值以元组的形式接收

七、函数的参数

1、形参

定义函数阶段的产物,具有接收实参的作用,具有描述意义

1.1 位置形参

从左到右依次接收实参的值

1.2 默认形参

  1. 如果你不给,使用默认值;如果调用的时候传值,使用传的值
  2. 默认形参必须得放在位置形参后面

2、实参

调用阶段的产物,传给形参一个具体的值,具有具体的值(可以为所有数据类型)

2.1 位置实参

从左到右依次给位置形参传值,一一对应,形参有多少个,实参也必须有多少个

2.2 关键字实参

  1. 关键字实参必须写在位置实参的后面
  2. 按照形参名给形参传值(使用情况,基本为0)---》函数的参数一般0-3个,尽量不要超过3个

八、可变长参数

1、可变长形参

形参中的会将溢出的位置实参全部接收,然后存储元组的形式,然后把元组赋值给 * 后的参数。需要注意的是:后的参数名约定俗成为args。

def sum_self(*args):
res = 0
for num in args:
res += num
return res res = sum_self(1, 2, 3, 4)
print(res) # 10

2、可变长实参

实参中的 * ,*会将 *后参数的值循环取出,打散成位置实参。以后但凡碰到实参中带 *的,它就是位置实参,应该马上打散成位置实参去看。 *,相当于做了解压缩,也就是把lt内的元素一个一个取出来传给形参。

def func(x, y, z, *args):
print(x, y, z, args) func(1, *(1, 2), 3, 4) # 1 1 2 (3, 4)

3、*形参

调用函数时,用元组接收多余的位置实参

def f1(*args):  # 一般约定俗成用args来做*形参的变量名
print(args) f1(1, 2, 3, 3, 4, 5, 5, 6, 7, 7, 7, 7, 7, 7, 7, ) # (1, 2, 3, 3, 4, 5, 5, 6, 7, 7, 7, 7, 7, 7, 7)

4、**形参

调用函数时,用字典接收多余的关键字实参

def f1(**kwargs):  # 一般约定俗成用kwargs来做*形参的变量名
print(kwargs) f1(x=1) # {'x': 1}

5、*实参(仅作了解)

传参时,把列表中的元素打散成位置实参然后依次传给位置形参

def f1(a, b, c, e, d, f, g):
print(a, b, c, e, d, f, g) lt = [1, 2, 3, 4, 5, 6, 7]
f1(*lt) # 1 2 3 4 5 6 7

6、**实参(仅作了解)

传参时,把字典中的元素打散成关键字实参然后依次传给位置形参

def f1(z, b):
print(z, b) dic = {'z': 1, 'b': 2} # a=1,b=2
f1(**dic) # 1 2

九、函数对象

python中一切皆对象

函数也是一种对象

函数对象 = 函数名

函数名+() 就是在调用,就是在调用

  1. 引用(拷贝)

    def f1():
    print('from f1') func = f1
    print('f1:', f1)
    print('func:', func) func()
  2. 容器元素

    def f1():
    print('from f1') lt = [f1, 1, 2, 3] print('lt[0]', lt[0])
    print('f1', f1) lt[0]()
  3. 作为函数的实参

    def f1():
    print('from f1') def f2(f2_f1):
    print('f2_f1',f2_f1)
    f2_f1() f2(f1)
  4. 作为函数的返回值

    def f1():
    print('from f1') def f2(f2_f1):
    return f2_f1 res = f2(f1) # 即res = f1
    print('res', res)
    print('f1', f1) res()

十、函数嵌套

函数嵌套 :函数里面有函数

定义函数时,只检测语法,不会执行代码

函数内部定义的函数,外部不能用

十一、名称空间和作用域

1、名称空间

内存中专门用来储存名称的空间

1.1 内置名称空间

储存了内置方法的名称的空间

1.2 全局名称空间

除了内置和局部都叫全局

1.3 局部名称空间

函数内部定义的都叫局部

2、作用域

2.1 全局作用域

内置名称空间+全局名称空间 = 全局作用域

2.2 局部作用域

局部名称空间 = 局部作用域

2.3 局部作用域的特点

  1. 全局作用域的 x 和局部作用域的 x 没有半毛钱的关系
  2. 局部作用域1的x和局部作用域2的x也没有任何关系,即使局部作用域1和局部作用域2再同一个局部作用域下

3、名称空间的执行(生成)顺序

  1. 内置名称空间:python解释器启动的时候就有了
  2. 全局名称空间:执行文件代码的时候才会有全局
  3. 局部名称空间:函数调用的时候才会有局部

4、搜索顺序

先从当前所在位置寻找,找不到再按照这种顺序,不会逆着方向寻找

局部 --》 全局 --》 内置 --》 报错

pyhton的函数的更多相关文章

  1. pyhton matplotlib可视化图像基础(二维函数图、柱状图、饼图、直方图以及折线图)

    //2019.07.22pyhton中matplotlib模块的应用pyhton中matplotlib是可视化图像库的第三方库,它可以实现图像的可视化,输出不同形式的图形1.可视化图形的输出和展示需要 ...

  2. pyhton函数——黑板客老师课程学习

    1.基本语法 语法: def func_name (arguments)  定义 statements return x,y x,y=func_name(para)   调用 作用域: 可以给内置的函 ...

  3. Pyhton函数篇(一)之函数中的形参与实参

    1:什么是函数 函数其实就是带名字的代码块,用于完成一些具体的工作.如果我们在写一段程序的时候,需要多次用到同样的一个功能,如果每次都要重复写相同的代码,不仅会增加我们的代码量,更会让我们写出的代码让 ...

  4. pyhton 函数参数,递归函数,高阶函数(一点点笔记)

    '''def test(x,y): print(x) print(y)test(2,y=3)def test(*args):#参数可以是不确定的多个数,接受N个位置参数,转换成元组形式 print(a ...

  5. pyhton函数

    函数编写文档 放在函数开头的字符串称为文档字符串(docstring),将作为函数的一部分存储起来 def square(x): 'Calculates the square of the numbe ...

  6. Pyhton实用的format()格式化函数

    Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能. 基本语法是通过 {} 和 : 来代替以前的 % . format 函数可以接受不限个参数 ...

  7. day18 Pyhton学习 内置函数最后七个

    1. enumerate  枚举函数 for i in enumerate(['a','b','c'],1): print(i)#(1, 'a')(2, 'b')(3, 'c') goods_lst= ...

  8. day18 Pyhton学习 匿名函数

    匿名函数 别称: lambda表达式 函数,没有名字 def wahaha(n):#wahaha return n**2 print(wahaha.__name__) qqxing = lambda ...

  9. day17 Pyhton学习 内置函数继续

    1. locals 本地作用域/局部作用域  会随着位置的改变而改变 2.globals 全局作用域   永远不变,永远是全局 3.complex:复数 实数(有理数和无理数) 某一个数的平方是-1 ...

随机推荐

  1. 从零搭建一个IdentityServer——聊聊Asp.net core中的身份验证与授权

    OpenIDConnect是一个身份验证服务,而Oauth2.0是一个授权框架,在前面几篇文章里通过IdentityServer4实现了基于Oauth2.0的客户端证书(Client_Credenti ...

  2. linux(6)查看进程ps命令

    ps命令 Linux ps (英文全拼:process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器 查看所有进程 ps -A 显示所有进程信息,连同命令行 ps - ...

  3. linux虚拟摄像头vivid配置

    总述    最近在看摄像头驱动,需要配置虚拟摄像头的驱动,但是教程里面是linux2.6内核的,实际电脑的是Ubuntu16,内核是linux4.15版本,从2.6到4.15内核好多文件发生了变化,所 ...

  4. 2020Nowcode多校 Round5 C. Easy

    C. Easy 构造两个序列分别要满足 \(\sum_{i=1}^{k} a_{i} = N\) \(\sum_{i=1}^{k} b_{i} = M\) 一种方案能贡献\(\prod_{i=1}^{ ...

  5. 【noi 2.6_7627】鸡蛋的硬度(DP)

    题意:其中n表示楼的高度,m表示你现在拥有的鸡蛋个数. 解法:f[i][j]表示 i 层楼有 j 个鸡蛋时,至少要扔多少次.3重循环,k为测试的楼层,分这时扔下去的鸡蛋碎和不碎的情况.要注意初始化. ...

  6. 活动精彩实录 | 阿里云刘军民(米诺):Cassandra中文社区年度回顾

    点击这里观看完整视频 大家好,我是刘军民,我是阿里云数据库的产品经理,目前负责云数据库的产品规划以及相关工作.曾在2019年和多位小伙伴一起发起了中文社区,我希望有更多的小伙伴能加入到社区建设中,这样 ...

  7. 三、Jmeter 定时器

    首先需要清楚Jmeter中各个元件的执行顺序: 元件的执行顺序 了解了元件有作用域之后,来看看元件的执行顺序,元件执行顺序的规则很简单,在同一作用域名范围内,测试计划中的元件按照如下顺序执行. (1) ...

  8. Pod 实现机制

    Pod 为了亲密性应用而存在: 两个应用需要通过 127.0.0.1 或者 Socket 通信: 两个应用之间发生文件交互: 两个应用发生频繁的调用 共享网络 Pod 中的所有容器拥有同一个 IP 地 ...

  9. Caffe入门:对于抽象概念的图解分析

    Caffe的几个重要文件 用了这么久Caffe都没好好写过一篇新手入门的博客,最近应实验室小师妹要求,打算写一篇简单.快熟入门的科普文. 利用Caffe进行深度神经网络训练第一步需要搞懂几个重要文件: ...

  10. Gym 100796B Wet Boxes(思维)题解

    题意:给一个如图坐标系,每个方形都放在下面两个中间,已知一个木块湿了那么他下面所有的都会湿,显然,不能湿两次.问,每次给出一个坐标,把他弄湿,有几个木块从干变成湿了. 思路:我们把坐标系拉直,就变成了 ...