pyhton的函数
一、函数引入
函数其实就是一种工具,和你敲钉子用的锤子没有任何区别
你在用锤子敲钉子的时候首先需要有一把锤子,使用函数也是一样,你需要先定义一个函数,才能使用这个函数。
你定义了一个函数,需要使用它的时候只需要叫他的名字就行了。比用锤子方便多了。
二、函数的定义
什么是函数?
函数就是一种工具
三、如何定义一个函数
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的特性:
- return 返回一个返回值,如果没有返回值,返回None
- 没有return 默认返回None
- return 会终止函数,不运行下面的代码,假设有多个return的时候,运行到第一个就会结束,不会运行第二个
- return 通过逗号隔开,可以返回多个值,返回值以元组的形式接收
七、函数的参数
1、形参
定义函数阶段的产物,具有接收实参的作用,具有描述意义
1.1 位置形参
从左到右依次接收实参的值
1.2 默认形参
- 如果你不给,使用默认值;如果调用的时候传值,使用传的值
- 默认形参必须得放在位置形参后面
2、实参
调用阶段的产物,传给形参一个具体的值,具有具体的值(可以为所有数据类型)
2.1 位置实参
从左到右依次给位置形参传值,一一对应,形参有多少个,实参也必须有多少个
2.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中一切皆对象
函数也是一种对象
函数对象 = 函数名
函数名+() 就是在调用,就是在调用
引用(拷贝)
def f1():
print('from f1') func = f1
print('f1:', f1)
print('func:', func) func()
容器元素
def f1():
print('from f1') lt = [f1, 1, 2, 3] print('lt[0]', lt[0])
print('f1', f1) lt[0]()
作为函数的实参
def f1():
print('from f1') def f2(f2_f1):
print('f2_f1',f2_f1)
f2_f1() f2(f1)
作为函数的返回值
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 局部作用域的特点
- 全局作用域的 x 和局部作用域的 x 没有半毛钱的关系
- 局部作用域1的x和局部作用域2的x也没有任何关系,即使局部作用域1和局部作用域2再同一个局部作用域下
3、名称空间的执行(生成)顺序
- 内置名称空间:python解释器启动的时候就有了
- 全局名称空间:执行文件代码的时候才会有全局
- 局部名称空间:函数调用的时候才会有局部
4、搜索顺序
先从当前所在位置寻找,找不到再按照这种顺序,不会逆着方向寻找
局部 --》 全局 --》 内置 --》 报错
pyhton的函数的更多相关文章
- pyhton matplotlib可视化图像基础(二维函数图、柱状图、饼图、直方图以及折线图)
//2019.07.22pyhton中matplotlib模块的应用pyhton中matplotlib是可视化图像库的第三方库,它可以实现图像的可视化,输出不同形式的图形1.可视化图形的输出和展示需要 ...
- pyhton函数——黑板客老师课程学习
1.基本语法 语法: def func_name (arguments) 定义 statements return x,y x,y=func_name(para) 调用 作用域: 可以给内置的函 ...
- Pyhton函数篇(一)之函数中的形参与实参
1:什么是函数 函数其实就是带名字的代码块,用于完成一些具体的工作.如果我们在写一段程序的时候,需要多次用到同样的一个功能,如果每次都要重复写相同的代码,不仅会增加我们的代码量,更会让我们写出的代码让 ...
- pyhton 函数参数,递归函数,高阶函数(一点点笔记)
'''def test(x,y): print(x) print(y)test(2,y=3)def test(*args):#参数可以是不确定的多个数,接受N个位置参数,转换成元组形式 print(a ...
- pyhton函数
函数编写文档 放在函数开头的字符串称为文档字符串(docstring),将作为函数的一部分存储起来 def square(x): 'Calculates the square of the numbe ...
- Pyhton实用的format()格式化函数
Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能. 基本语法是通过 {} 和 : 来代替以前的 % . format 函数可以接受不限个参数 ...
- day18 Pyhton学习 内置函数最后七个
1. enumerate 枚举函数 for i in enumerate(['a','b','c'],1): print(i)#(1, 'a')(2, 'b')(3, 'c') goods_lst= ...
- day18 Pyhton学习 匿名函数
匿名函数 别称: lambda表达式 函数,没有名字 def wahaha(n):#wahaha return n**2 print(wahaha.__name__) qqxing = lambda ...
- day17 Pyhton学习 内置函数继续
1. locals 本地作用域/局部作用域 会随着位置的改变而改变 2.globals 全局作用域 永远不变,永远是全局 3.complex:复数 实数(有理数和无理数) 某一个数的平方是-1 ...
随机推荐
- 20000套免费ppt模板获取攻略
前言 又到年末了,发现需要用到简历,PPT这些的地方又多了.PPT这东西吧,颜值真的很重要,毕竟老板拉融资都是用ppt拉来的.只要ppt够精美,外加上你的故事讲得好,A轮指定不是问题呀.往小处说,就是 ...
- k8s~kubectl常用命令
查看所有 pod 列表, -n 后跟 namespace, 查看指定的命名空间 kubectl get pod kubectl get pod -n kube kubectl get pod -o w ...
- Web开发模型
1.服务器 web服务器:pc机器安装一个具有web服务的软件,称之位web服务器 数据库服务器:pc机器安装一个具有数据管理件服务的软件,称之为web服务器 邮件服务器:pc机器安装一个具有发送邮件 ...
- dp practice 1
https://codeforces.com/problemset/problem/553/A dp+组合数学 dp[i] 放前i种颜色的方法数 #include<bits/stdc++.h&g ...
- P2801 教主的魔法 (分块)
题目传送 长度为\(n(n\le 1000000)\)的数组,\(q(q\le 3000)\) 次操作.修改操作即将某个区间的值增加某个不大于1000的值,查询操作即查询某个区间比C大于等于的数有多少 ...
- Codeforces Round #665 (Div. 2) D. Maximum Distributed Tree (dfs计数,树)
题意:给你含有\(n\)个节点,\(n-1\)条边的树,以及\(m\)个质数和\(1\),你需要在这\(m\)个质数和一个\(1\)选择数(质数只能选一次,\(1\)可以多选)给\(n-1\)条边赋值 ...
- JavaScript——面向对象与原型
在最外面使用this,此时this是window作用域下的,因此他指向全局变量 对象冒充: 实例属性不会共享!
- CodeForces - 1250J The Parade 二分
题目 题意: 一共n种身高,每一个士兵有一个身高.你需要把他们安排成k行(士兵不需要全部安排),每一行士兵身高差距小于等于1.你要找出来最多能安排多少士兵 题解: 这道题很容易就能看出来就是一道二分, ...
- jmespath(2)投影Projections
投影 投影是JMESPath的关键特性之一.它允许您将表达式应用于元素集合.有五种投影: 列表投影 切片投影 对象投影 展平投影 过滤投影 处理投影需要注意的点 投影评估分为两个步骤.左侧(LHS)创 ...
- MongoDB 部署 & 基础命令
MongoDB 官方文档 MongoDB 介绍 Mongodb 由 C++ 语言编写的,是一个基于分布式文件存储的开源数据库系统. 是专为可扩展性,高性能和高可用性而设计的数据库, 是非关系型数据库中 ...