python第四次任务

一:函数关键字:

python函数中一般使用def定义关键字

二:函数的定义:

python中函数声明和函数的定义是视为一体的

1:在python中使用def关键字定义的函数,不用指定返回值的类型

2:函数参数params可以是一个或者多个,同样,也不用指定返回值的类型,因为python中变量都是弱类型的,python会自动根据值来维护其类型

3:return语句是可选的,它可以出现在python中的任何地方,表示函数的执行到此结束;如果没有return,则直接返回none,若有return还是返回none,则是因为return后没有接表达式或者值。

def printHello():
    print 'hello'
    
def printNum():
    for i in range(0,10):
        print i
    return
        
def add(a,b):
    return a+b
    
print printHello()
print printNum()
print add(1,2)

详细见博客:https://blog.csdn.net/u010098331/article/details/52053877 

三:函数参数与作用域:

1:传递参数:

2:特定的参数匹配模型

  • 参数的传递是通过自动将对象赋值给本地变量名来实现的。所有的参数实际上都是通过指针进行传递的,作为参数被传递的对象从来不自动拷贝。
  • 对于numbers,Strings,元祖这种不可改变值的类型,在函数内部的参数名的赋值不会影响调用者。原因就是这种类型会在改变值的时候,重新指向新地址,那么之前的对象执行地址值不会变,就等同于copy.(传递值就是传递指针的指向)
  • 改变函数的可变对象参数的值会对调用者有影响。(直接在指向地址处修改值,不再重现创建新的地址作为指向)
  • 位置:从左至右进行匹配。
  • 关键字参数:通过参数名进行匹配。(调用者可以定义哪一个函数接受这个值,通过在调用时使用参数的变量名,使用name=value这种语法。)
  • 默认参数:为没有传入值的参数定义参数值。
  • 可变参数:搜集任意多基于位置或关键字的参数。
  • 可变参数解包:传递任意多的基于位置或关键字的参数。
  • Keyword-only参数:参数必须按照名称传递。(只存在于Python3.0中)

>>匹配语法

语法 位置 解释
func(value) 调用者 常规参数:通过位置进行匹配。
func(name=value) 调用者 关键字参数:通过变量名匹配。
func(*sequence) 调用者 以name传递所有的对象,并作为独立的基于位置的参数。
func(**dict) 调用者 以name成对的传递所有的关键字/值,并作为独立的关键字参数。
def func(name) 函数 常规参数:通过位置或变量名进行匹配。
def func(name=value) 函数 默认参数值,如果在调用中传递的话。
def func(*name) 函数 匹配并收集(在元组中)所有包含位置的参数。
def func(**name) 函数 匹配并收集(在字典中)所有包含位置的参数。
def func(*args,name) 函数 参数必须在调用中按照关键字传递。
def func(*,name=value) 函数 参数必须在调用中按照关键字传递。(Python3.0)

3:关键字参数:

关键字参数允许通过变量名进行匹配

4:默认参数:

默认参数允许创建函数可选的参数,如果没有传入值的话,在函数运行前,参数就被赋了默认值

5:收集参数:

在函数定义中 ,在元组中收集位置不匹配的参数

6:解包参数:

在最新的Python版本中,我们在调用函数时能够使用*语法。在这种情况下,它与函数定义的意思相反。它会解包参数的集合,而不是创建参数的集合。

7:python作用域:

1)在一个Python程序只用变量名时,Python创建、改变或查找变量名都是在所谓的命名空间(一个保存变量名的地方)中进行的。也就是说,在代码中变量名被赋值的位置决定了这个变量名能被访问到的范围,也即决定了它存在于哪个命名空间中。

2)除了打包程序之外,函数还为程序增加了一个额外的命名空间层:默认情况下,一个函数所有变量名都是与函数的命名空间相关联的。这意味着:

3)一个在def内的定义的变量能够在def内的代码使用,不能在函数的外部应用这样的变量名。
def之中的变量名与def之外的变量名并不冲突,一个在def之外被赋值的变量X与在这个def之中赋值的变量X是完全不同的变量。
>>作用域法则
1)在开始编写函数之前,我们编写的所有代码都是位于一个模块的顶层(也就是说,并不是嵌套在def之中),所以我们使用的变量名要么是存在于模块文件本身,要么就是Python内置预先定义好的。函数定义本地作用域,而模块定义的全局作用域。这两个作用域有如下关系:

2)内嵌的模块是全局作用域 每个模块都是一个全局作用域(也就是说,一个创建于模块文件顶层的变量的命名空间)。对于模块外部来说,该模块的全局变量就成为了这个模块对象的属性,但是在这个模块中能够像简单的变量一样使用。
全局作用域的作用范围仅限于单个文件 这里的全局指的是在一个文件的顶层的变量名仅对于这个文件内部的代码而言是全局的。在Python中是没有基于一个单个的、无所不包的情景文件的全局作用域的。
3)每次对函数的调用都创建了一个新的本地作用域
4)赋值的变量名除非声明为全局变量或非局部变量,否则均为局部变量
5)所有的变量名都可以归纳为本地、全局或者内置的·

四:函数返回值:

  • 函数需要先定义后调用,函数体中 return 语句的结果就是返回值。如果一个函数没有 reutrn 语句,其实它有一个隐含的 return 语句,返回值是 None,类型也是 'NoneType'。
  • return 语句的作用:
  • 结束函数调用、返回值

1)指定返回值与隐含返回值:

函数体中 return 语句有指定返回值时返回的就是其值

函数体中没有 return 语句时,函数运行结束会隐含返回一个 None 作为返回值,类型是 NoneType,与 return 、return None 等效,都是返回 None。

2)return语句位置与多余return语句

python 函数使用 return 语句返回 "返回值",可以将其赋给其它变量作其它的用处

所有函数都有返回值,如果没有 return 语句,会隐式地调用 return None 作为返回值

一个函数可以存在多条 return 语句,但只有一条可以被执行,如果没有一条 reutrn 语句被执行,同样会隐式调用 return None 作为返回值

如果有必要,可以显式调用 return None 明确返回一个None(空值对象)作为返回值,可以简写为 return,不过 python 中懒惰即美德,所以一般能不写就不写

如果函数执行了 return 语句,函数会立刻返回,结束调用,return 之后的其它语句都不会被执行了

引文博客链接:https://www.cnblogs.com/i-honey/p/7679897.html 

猜你喜欢

转载自blog.csdn.net/weixin_44387346/article/details/88105877