函数是高级语言最基本的编程单元
x是自变量,给定x会得到y,比如sorted,你给它可迭代对象,得到返回值,这个返回值就是y,sorted会立即返回给你一个新的列表
扔x=可迭代对象,经过sorted函数f,得到返回值y
这些高级语言都源自数学语言
完成一定的功能,比如sorted,排序,返回一个新的列表
结构化编程带来一些东西,分支,循环,可以约定在一块代码有几个入口,几个出口
函数的目的就是为了带来结构化的封装,帮助把你的代码复用,可减少代码冗余
易读,按功能封装,只看函数名就知道是什么意思
封装,复用,
还有就是自定义的函数了
如何定义自定义函数
函数名是能找到这个函数对象的名称
语句块必须缩进
python函数没有return语句,隐式会返回一个none,比如print函数(没有返回值,但是本身是有none)
定义的参数列表称为形式参数,只是一种符号表达,简称形参
如何调用函数,
函数要使用,就需要调用,加小括号,所谓的函数就是你定义的东西,调用的时候写入的参数就是实际参数,实参
写一个简单例子
def(就是define定义的意思),函数名就是add,或者函数名就告诉是做加法的
add是标识符
选中的是函数定义部分,函数构建好后也会在内存中构建一个内存中 的对象
其实就是add =后面的函数定义
return是返回值
**4,5是送入的实实在在的参数
x,y是假的,只是未来表示形式参数
实参和形参对应起来,4给x,5给y
**
赋值计算是先计算右边,得出9,9赋值给a,靠return语句返回
定义函数是不会执行的,但是内存中依然建立了add标识符对应的函数对象之间的关系,定义只是定义好了等待使用
打印出来的值,没人接,10,就消亡了
print本身也是函数帮你打印出来
print只是帮你打印出来,print本身是没有return的
返回值只要是和法治都可以用变量来接收,函数名也是标识符,返回值也是值,没有返回值,none,none也是返回值,所谓的值就是python中的合法数据
定义函数需要在调用函数前,不然名字找不到,nameerror,因为python写的也是脚本从上往下
python要求定义必须在前,先定义,内存就有标识符,然后才能使用这个标识符
callable是一个内建函数
一个int对象是不可调用的
不能加括号,加括号表示调用了,就会提示你少两个参数
add(4,5)进去就会有返回值,相当于函数调用,这个函数先执行,返回了9,问9是否可以调用,当然不可以调用
这个是没有调用函数,只是问这个函数的标识符有没有调用这个过程
python是强类型的语言,动态的类型
就是并没有在形参里告诉是什么类型,等于在送实参的时候决定了当前什么类型,所以根本控制不住使用者传什么参数进来
因为python是动态语言,但是解决了这点,可能就是静态编译型语言了(java,c++),因为定义好什么类型就是什么类型了
如果在写python不约束的话会带来很多问题,自由并不是最好的,可能项目失控,然后推倒重写
传入的参数,应该和定义的参数相匹配,传入的实参和定义的形参要匹配,到目前为止是这样,
xyz(位置参数),135会把135 一一对位,用实参替换形参,这个动作叫传参,按照参数定义的位置一一传入实参的
关键字,keyword,x=1,y=3,z=5关键字传输方式,这个叫关键字传参,但是形参的定义未变,传参的方式是一样的,
如果使用形参的名字来传入实参的方式,就传参顺序就可和定义顺序不同,因为是靠名字找的
只要是一个合法的值都可以传,而且python是动态类型的语言,没法限制你传入的数据类型
加#号代表错了,特别注意,要求位置参数必须在关键字参数之前传入,位置参数是按照顺序对应的,把关键字放到前面去就错了
现在这个add指向一个新的函数定义
告诉你语法错了,位置参数在关键字参数之后,应该把位置参数放前面去
定义时加入,定义形式参数时给的默认值,就是缺省值,default
大量函数其实有些都是用的缺省值
但是有缺省值,也不能把位置参数放后面,位置参数必须放在关键字参数之前
x没有就可以用缺省值
不允许非缺省参数跟着缺省参数
定义的时候,把缺省的参数放在非定义的参数之前是不被允许的,必须要讲明实参,形参
可以这么调用,因为这个四个都有缺省值
位置对应传参
关键字传参往后面,对的,其他找不到用缺省值配齐
全都是关键字传参,
host没有赋值就不能代表定义一个变量