美文网首页Python is Best
Python——函数基础

Python——函数基础

作者: So_ProbuING | 来源:发表于2017-09-25 16:00 被阅读17次

函数基础

  • 函数就是将一些语句集合在一起的部件,不止一次地在程序中运行。还能计算出一个返回值,并能够改变作为函数输入的参数。

编写函数

函数基础

  • def是可执行的代码,Python函数时由def编写的,def是一个可执行的语句,函数并不存在。直到Python运行了def后才存在。
  • def创建了一个对象并将其赋值给某一变量名。当Python运行到def语句时,将会生成一个新的函数对象并将其赋值给这个函数名。就像所有的赋值一样,函数名变成了某一个函数的引用。
  • return将一个结果对象发送给调用者,当函数被调用时,其调用者停止运行直到这个函数完成了工作,之后函数将控制权返回调用者,return返回值就是函数调用的结果
  • yield向调用者返回一个结果对象
    global声明了一个模块级的变量并被赋值,在默认情况下,所有在一个函数中被赋值的对象,是这个函数的本地变量,并且仅在这个函数运行的过程中存在。为了分配一个可以在整个模块中都可以使用的变量名,函数需要在global语句中将它列举出来。变量名需要关注它的作用域,并且是通过赋值语句将变量名绑定至作用域的
  • nonlocal声明了将要赋值的一个封闭的函数变量。在Python3中添加的nonlocal语句允许一个函数来赋值一条语法封闭的def语句的作用域中已有的名称。允许封闭的函数作为保留状态的地方
  • 函数时通过对象引用传递的,在Python中,参数通过赋值传递给函数。
  • 参数、返回值以及变量并不是声明,在函数中并没有类型约束。可以传递任意类型的参数给函数。函数也可以返回任意类型的对象

def语句

格式

def将创建一个函数对象并将其赋值给一个变量名

def <name>(arg1,arg2,....argn):
      <statements>
  • def包含了首行并有一个代码块跟随在后边,这个代码块通常会缩进。这个代码块就是Python函数的执行语句
  • def的首行定义了函数名,赋值给了函数对象,并在括号中包含了0个或多个参数。在函数调用的时候,在首行的参数名称赋值给了括号中传递来的对象
  • 带返回值的格式
def <name>(arg1,arg2,....argN):
  statement
return <value>
  • return语句可以在函数主体中任何地方出现,表示函数调用的结束。并将结果返回至调用处。
  • 定义的函数中,如果没有return,会默认return null
  • 如果在函数中return多个对象,Python会将多个对象封装为一个元组返回,其实返回的还是一个对象

def是实时执行的

  • Python的def语句实际上是一个可执行的语句:当运行时,创建一个新的函数对象并将其赋值给一个变量名,Python中的所有语句都是实时运行的,没有独立编译这样的流程。所以def语句可以出现在任一地方。还可以嵌套在其他的语句中
if test:
  def func():
      statement
else:
  def func()
      statment
statement
func()
  • def在运行时简单地给一个变量名进行赋值,Python函数在程序运行之前并不需要全部定义。
  • 函数的函数名并不重要,可以将函数赋值给一个不同的变量名,并通过新的变量名进行调用。
  • 函数允许任意的属性附加到记录信息供随后使用
def func():....
func()
func.attr = value
示例
# 返回两个数的计算结果
>>> def times(x,y):
...     return x*y
... 
>>> time = time(2,3)
>>> time = times(2,3)
>>> time
6
  • 函数中的参数完全取决于参数的对象类型

用户定义的函数属性

用户定义的函数具有以下属性

  • f.doc 文档字符串
  • f.name 函数名称
  • f.dict 包含函数属性的字典
  • f.code 字节编译的代码
  • f.defaults 包含默认参数的元组
  • f.globals 定义全局命名空间的字典
  • f.closure 包含与嵌套作用域相关数据的元组

Python中的多态

同样的函数,在不同的实例下执行的结果取决于不同的实例。这种依赖行为称为多态。

  • 作为函数,可以自动的适用于所有类别的对象类型。只要对象支持所预期的接口,函数就能处理
  • Python中代码不应该关心特定的数据类型。
# 寻找序列的交集
>>> def intersect(seq1,seq2):
...     res=[]
...     for x in seq1:
...             if x in seq2:
...                     res.append(x)
...     return res
... 
>>> x = [1,2,3,4,5]
>>> y = ['a',1,2,'b','c',4]
>>> resout = intersect(x,y)
>>> resout
[1, 2, 4]
  • 如果我们传入了不支持这些接口的对象,Python将会自动检测出不匹配,并抛出一个异常
本地变量

在上述的代码中res是本地变量,这个变量只是在def内的函数中是可见的,并且仅在函数运行时是存在。所有的在函数内部进行赋值的变量名都默认为本地变量。

  • 参数也是通过赋值被传入的,所以seq1和seq2是本地变量
  • for循环将元素赋值给了变量X,所以变量X是本地变量
  • 所有的本地变量都会在函数调用时出现,并在函数退出时消失。

相关文章

  • python基础笔记

    Python基础 函数:

  • Python入门

    Python3教程 安装Python 第一个Python程序 Python基础 函数 高级特性 函数式编程 模块 ...

  • python入门套路

    Python基础 基础数据类型 bool string list tuple dictionary 基础函数 he...

  • python基础-07-函数

    python基础-函数 1.函数的定义 例子: 2.python中函数的参数详解 必备参数demo: 默认参数de...

  • Python基础-函数

    Python基础-函数 1.函数定义 2.参数传值 3.内置函数

  • 理解Python中的闭包

    Python基础 在Python中,函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数。...

  • Python基础 - 函数基础

    知识回顾 列表,字典,元组,集合 列表(list):[];可变,有序;元素是任何类型的数据增:append,ins...

  • Python从入门到精通

    Python语法的三个阶段 Python基础语法函数是编程 Python进阶语法面向对象编程 Python高级语法...

  • #python基础入门#目录

    python基础入门_01 保留字常用函数turtle库基本数据类型time库 python基础入门_02 程序的...

  • 2018-07-25Python(7)

    python基础语法(7) 函数下 lambda函数lambda函数有自己的作用域。代码示例:def makeAc...

网友评论

    本文标题:Python——函数基础

    本文链接:https://www.haomeiwen.com/subject/wwvrextx.html