目录
函数
这个就不陌生了,C体系里面的函数风格是一样的,看起来也比较规整,访问权限 返回值类型 函数名(参数类型 入参变量)
但是python里面 就有点不同,因为函数的定义有 专门的关键字 def ,而且没有规定返回值的类型,如 我们最爱写的 void 了
写太顺手还真扭转不过来
定义函数
def 函数名(参数列表):
- 使用def关键字进行函数的声明,函数没有返回值类型的,这点倒是和javascript很相似,
- 但是python的每一个函数都有一个返回值的,虽然我们没有定义返回值类型. 如果有return语句那么就返回return语句那个值,如果没有return语句,那么就返回一个None
- 函数的参数不指定类型
- 函数的参数允许默认值,调用的时候可以不进行指定实参 例如 def func(a,b=True) ,其中的参数b就是一个默认值,传入的时候可以不进行指定,也可以进行指定覆盖
函数功能描述 docstring
'''
或者是""" 之间的字符串
编写的 文档字符串就是函数的属性了,可以通过函数的 __doc__属性来获取这个字符串
函数信息查看
使用 dir(函数名) 可以查看一个函数的属性
函数参数设置默认值
函数的参数可以指定默认值的
但是指定的默认值必须在函数参数列表的末尾
如果不在函数参数的末尾会报错的
在函数中调用其他函数
这个调用和C体系一样,函数的调用原理是相同的
在函数中定义内置函数
这个和C体系就有很大的不同。只有Java允许函数内部可以定义内部类,可以通过内部类达到间接定义函数的目的。
但是python可是直接定义内部函数的。
这个函数就是宿主函数的一个属性,只能供宿主函数访问调用
变量的作用域
说道函数就必须说这个变量的作用域了
函数内部是局部作用域
函数外部是全局作用域
函数内部可以访问全局作用域的变量
局部作用域之间不可以互相访问
因为函数是解释执行的,因此只要在函数执行时候,全局变量被定义了那么执行就不会有错,不在于这个变量定义的位置
比如是定义在函数之前还是定义在函数后面
局部作用域中的变量名字和全局作用域变量名字一致
如果存在这种情况,那么只有在函数内部的区域使用的局部作用域变量
也就是发生了覆盖的现象。
如果我们需要在局部作用域中 使用全局作用域相同的变量
那么使用 global 语句来告诉 python 这个变量是全局的
global语句
使用global告诉python 后面的东西是全局的,而不用看它的定义位置是在函数内部还是外部
这个时候对于这个东西的操作也就是全局的操作的
这个用法很特殊
首先 要用 global 来声明一个变量
然后再给这个变量赋值
这样我们可以在一个函数的内部声明一个全局变量的
但是下文如何区分这个变量是全局的还是局部的呢?
很简单:
就看下文中 使用该变量的地方:
- 如果在函数外部 ,肯定是全局的
- 如果在函数内部,没有对该变量进行赋值操作,那么就表示没有定义新的变量,此时肯定是全局
- 如果再函数内部给该变量进行了二次赋值操作,那么就表示此刻定义了一个新的变量,从而会覆盖掉同名的全局变量的
可以发现,全局变量使用global定义的时候,可以再任何位置进行定义
但是如果再函数内部进行的定义 的全局变量一旦进行了二次赋值操作那么就重新定义了一个同名的局部变量