什么是函数?

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


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)

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

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


函数和方法的区别?

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

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

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

    正确理解 Python函数,能够帮助我们更好地理解 Python 装饰器.匿名函数(lambda).函数式编程等高阶技术. 函数(Function)作为程序语言中不可或缺的一部分,太稀松平常了.但函数 ...

  2. python函数与方法装饰器

    之前用python简单写了一下斐波那契数列的递归实现(如下),发现运行速度很慢. def fib_direct(n): assert n > 0, 'invalid n' if n < 3 ...

  3. python 函数和方法的区别

    一.函数和方法的区别 1.函数要手动传self,方法不用传 2.如果是一个函数,用类名去调用,如果是一个额方法,用对象去调用 举例说明: class Foo(object): def __init__ ...

  4. 对于Python函数与方法,你可能存在些误解

    欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...

  5. python函数与方法的区别

    一.函数和方法的区别 1.函数要手动传self,方法不用传 2.如果是一个函数,用类名去调用,如果是一个额方法,用对象去调用 举例说明: class Foo(object): def __init__ ...

  6. Python学习日记之Python函数及方法使用总结

    1.  DocStrings 文档字符串     可以直接输出位于函数内定义的说明 # -*- coding:utf-8 -*- def printMax(x, y): '''示例: 说明文档''' ...

  7. python 函数私有方法

    #coding:utf-8 class A(object): def _test1(self): print('this is _test1') def test2(self): print('thi ...

  8. 使用可变对象作为python函数默认参数引发的问题

    写python的都知道,python函数或者方法可以使用默认参数,比如 1 def foo(arg=None): 2 print(arg) 3 4 foo() 5 6 foo("hello ...

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

    内置函数 python提供了68个内置函数,在使用过程中用户不再需要定义函数来实现内置函数支持的功能.更重要的是内置函数的算法是经过python作者优化的,并且部分是使用c语言实现,通常来说使用内置函 ...

随机推荐

  1. Tomcat单独部署,控制台乱码解决方法

    使用Tomcat作为容器,部署项目的时候,发现控制台总是乱码,乱码如下 打开Tomcat的部署目录 找到这一行,将UTF-8改成GBK java.util.logging.ConsoleHandler ...

  2. sqlserver 两 表 数据 复制 (附加 跨服务器 查询的方法)

    一 : 这个sql 语句 可以快速的 将 一 个旧表 中的指定字段的数据 复制到 另一个新表的指定字段中 insert into dbo.Customer ( CustomerId , Custome ...

  3. 【hadoop环境问题】namenode无法启动问题解决

    [问题背景] 要在自己的阿里云上搭伪分布式,用来复习和强化hive相关的知识,在执行脚本 sh start-dfs.sh后,jps后: 然后查看name的日志,报错如下: [解决方法] 网上的很多方法 ...

  4. Python实现协程

    什么是进程和线程 有一定基础的小伙伴们肯定都知道进程和线程. 进程是什么呢? 直白地讲,进程就是应用程序的启动实例.比如我们运行一个游戏,打开一个软件,就是开启了一个进程. 进程拥有代码和打开的文件资 ...

  5. java定时案例

    好久没写笔记了,变懒了! java定时运行的三个案例: 一, 通过sleep方法来达到定时任务的效果 public class testTime { public static void main(S ...

  6. MySQL 8.0: From SQL Tables to JSON Documents (and back again)

    MySQL 8.0: From SQL Tables to JSON Documents (and back again) | MySQL Server Bloghttps://mysqlserver ...

  7. 各种Android UI开源框架 开源库

    各种Android UI开源框架 开源库 转 https://blog.csdn.net/zhangdi_gdk2016/article/details/84643668 自己总结的Android开源 ...

  8. ColorMatrix图片饱和度设置

    package com.loaderman.customviewdemo; import android.app.Activity; import android.graphics.Bitmap; i ...

  9. SVG动画示例

    package com.loaderman.customviewdemo; import android.graphics.drawable.Animatable; import android.os ...

  10. 24 Flutter官方推荐的状态管理库provider的深入使用、初始化修改状态、父子组件同步状态

    加群452892873 下载对应24课文件,运行方法,建好项目,直接替换lib目录,在往pubspec.yaml添加上一下扩展. cupertino_icons: ^0.1.2 flutter_swi ...