理解Python函数和方法

什么是函数?

  函数是抽象出的一组执行特定功能的重复代码,通俗理解,就是对一些重复的工作进行封装和然后直接调用,避免重复造轮子。

Python中的函数如何定义?

  使用def关键字,结构如下:

def 函数名(参数列表):
    函数体
    return语句(可省略)

  其中return 语句表示函数的结束,在函数内部return语句后的语句不会执行,return关键字后面客户以跟变量,表达式等表示向函数调用方的返回值,也可以不加变量或者直接省略return语句,表示向函数调用方返回None对象。

函数如何调用?

  调用方法:函数名加括号,括号里传入参数列表,如下所示:

def fun(a):
    print(a)

执行结果

>>> fun(3)
3

函数的参数有几种类型?

  函数的参数按照传入的要求和数量、类型的不同,一般分为以下几种:

    1.位置参数(必选参数)

def fun(arg1,arg2,arg3):
    pass

      位置参数是最常见的参数类型,如上图所示,arg1,arg2,arg3是三个位置参数,顾名思义,在调用时必须严格按照定义的位置顺序传入参数,否则会造成结果错误甚至报错。

    2.默认参数

      如果某个参数的值大部分情况下都为某一特定的值,为调用方便,可为其设默认值,在调用时如果该参数取默认值,可不用传入该参数,如下所示:

def fun(name,college="NEU"):
    print(name,"graduated from",college)执行结果

>>> fun("I")
I graduated from NEU

      注意:

        函数定义时,默认参数必须在必须参数(没有默认值的)之后,

        默认参数必须指向不可变对象(即为其赋的值必须是不可变对象),才可保证每次执行时默认参数的值相同。

      默认参数可以简化函数的调用,也可提高函数更新(增加新参数)后的向下兼容性,即为新增加的参数设置默认值从而不用改写原来函数的调用方式。

    3.可变参数

      “可变”指的是传入的参数个数可变,可变参数在定义时使用"    *args     "(args可改为任意变量名),调用时可传入任意数量的参数,会自动组装成元组,由args变量名指向。如下所示:

def fun(*args):
    print(agrs)

执行结果
>>> fun(1,2,3)
(1, 2, 3) 

    4.关键字参数

      所谓关键字参数,即为在传入时必须指明参数名和参数值,即以“参数名=值 ”的形式传入参数

      和可变参数类似,关键字参数支持传入任意个数的参数,区别是传入的必须是关键字参数,在执行时于自动将传入的关键字参数组装成字典,关键字参数在定义时使用" **kwargs "                              亦可换成其他变量名,指向组装好的字典),如下所示:

 

def fun(**kwargs):
    print(kwargs)

执行结果
>>> fun(a=1,b=2)
{‘a‘: 1, ‘b‘: 2}

    5.命名关键字参数

      关键字参数不会限制关键字参数的名字,不利于参数名的检查,命名关键字能指定传入的关键字参数的名称,如果传入得关键字参数名称不符,将会报错。和关键字参数**kw不同,

命名关键字参数需要一个特殊分隔符**后面的参数被视为命名关键字参数。定义的格式为“*,参数名1,参数名2“。如下所示:

def fun(*,a,b):
    print("success")

>>> fun()
Traceback (most recent call last):
  File "<pyshell#9>", line 1, in <module>
    fun()
TypeError: fun() missing 2 required keyword-only arguments: ‘a‘ and ‘b‘
>>> fun(a=1)
Traceback (most recent call last):
  File "<pyshell#10>", line 1, in <module>
    fun(a=1)
TypeError: fun() missing 1 required keyword-only argument: ‘b‘
>>> fun(a=1,b=2)
success

      如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了(命名关键字在定义时亦可设默认值):

def person(name, age, *args, city, job="SE"):
    print(name, age, args, city, job)

以上几种参数在函数定义时,按何种顺序?

  参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

函数和方法的区别?

  函数和方法本质上没有不同,一般来说类中定义的函数叫方法,其他情况下都叫函数。

原文地址:https://www.cnblogs.com/burningcarbon/p/11624515.html

时间: 2024-11-05 06:30:49

理解Python函数和方法的相关文章

正确理解Python函数是第一类对象

正确理解 Python函数,能够帮助我们更好地理解 Python 装饰器.匿名函数(lambda).函数式编程等高阶技术. 函数(Function)作为程序语言中不可或缺的一部分,太稀松平常了.但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性.那到底什么是第一类对象呢? 函数是对象 在 Python 中万物皆为对象,函数也不例外,函数作为对象可以赋值给一个变量.可以作为元素添加到集合对象中.可作为参数值传递给其它函数,还可以当做函数的返回值,这些特性

理解python函数是第一类对象

转自:https://foofish.net/function-is-first-class-object.html.尊重原创,特此声明! ------------------------------------------------------------------ 正确理解 Python函数,能够帮助我们更好地理解 Python 装饰器.匿名函数(lambda).函数式编程等高阶技术. 函数(Function)作为程序语言中不可或缺的一部分,太稀松平常了.但函数作为第一类对象(First

Python - 函数属性方法装饰器(二)

1.给类绑定属性值 类名.属性名 = 属性值 class Stu(object): # 构造方法 def __init__(self): print('我是一个学生') # 给类添加属性 s = Stu() s.name = 'Tom' print(s.name) 注:仅供当前对象使用 2.类.对象的属性操作 setattr() 函数用于设置属性值,该属性不一定是存在的. setattr(object, name, value) -object: 对象 -name:对象属性,字符串 -value

Python 函数对象、生成器 、装饰器、迭代器、闭包函数

一.函数对象 正确理解 Python函数,能够帮助我们更好地理解 Python 装饰器.匿名函数(lambda).函数式编程等高阶技术. 函数(Function)作为程序语言中不可或缺的一部分,太稀松平常了.但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性.那到底什么是第一类对象(First-Class Object)呢? 在 Python 中万物皆为对象,函数作为第一类对象有如下特性: #函数身为一个对象,拥有对象模型的三个通用属性:id(内存地址

python学习交流 - 内置函数使用方法和应用举例

内置函数 python提供了68个内置函数,在使用过程中用户不再需要定义函数来实现内置函数支持的功能.更重要的是内置函数的算法是经过python作者优化的,并且部分是使用c语言实现,通常来说使用内置函数相比于用户自己定义函数实现相同功能,在执行效率和对内存的分配和使用上是要更加理想的.所以理解和熟练运用python中的内置函数,不仅可以增强代码的可读性,同时也可以提升代码的品质.下面对内置函数的使用方法进行分类介绍,以方便归纳理解. 一.查看作用域中变量相关 global () 功能:查看全局作

python列表函数和方法

Python列表函数和方法 python列表中主要有以下函数: cmp(list1,list2)    比较两个列表的元素 len(list)           列表元素的个数 max(list)           返回列表元素的最大值 min(list)           返回列表元素的最小值 list(seq)           将元组转换成列表 ---------------------------------我是华丽的分割线----------------------------

[python 笔记3]函数(方法?)

1.定义 python函数以关键字def标识 def test(name): print 'hello %s'%(name) name=raw_input('please input your name: ') test(name) PS:在python中代码块以缩紧的方式进行标识,所以缩进对齐的语句为一个代码块,这比像C++\java使用{}进行标识的方法方便不少,但是也对一些代码对齐不规范的同学带来一些麻烦 def 函数名(参数列表): 函数体 2.参数列表 python在函数中的参数与C+

Python列表操作的函数和方法

http://www.jb51.net/article/47978.htm 列表的数据项不需要具有相同的类型.列表中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推.Python有6个序列的内置类型,但最常见的是列表和元组.序列都可以进行的操作包括索引,切片,加,乘,检查成员.此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法. Python列表操作的函数和方法列表操作包含以下函数:1.cmp(list1, list2):比较两个列表的

python基础函数、方法

python的函数和方法,通过def 定义: 函数的特性: 减少重复代码 使程序变的可扩展 使程序变得易维护 函数和方法的区别:函数有返回值.方法没有 语法定义: def sayhi():#函数名 print("Hello, I'm nobody!") sayhi() #调用函数 可以带参数 #下面这段代码 a,b = 5,8 c = a**b print(c) #改成用函数写 def calc(x,y): res = x**y return res #返回函数执行结果 c = cal