python中可以将某些具备一定功能的代码写成一个函数,通过函数可以在一定程度上减少代码的冗余,节约书写代码的时间。因为有一些代码实现的功能我们可能会在很多地方用到。

1、函数的声明与定义

通过def关键字声明函数,函数名可以自定义,一般时要求做到见名知义,在函数体内我们可以书写实现功能的代码

函数一般分为无参函数,有参函数。无参函数就像下面这样

'''
函数定义:
def 函数名():
函数体
''' def fun():
pass

简单的有参函数一般是下面这样

def fun(x,y):
pass

其中x,y成为函数的形参

2、函数参数的划分

函数参数一般分为,位置参数,默认值参数,可变长度参数

当定义函数时,参数的顺序一般是位置参数在前,默认值参数随后,可变长度参数最后。可变长度参数一般有分为两种,拥有不同的写法。

仅含有位置参数的例子,如下

def fun(name, age):  # name, age 是位置参数,也是函数的形参
print(name, age) fun('ajune', 18) # 'ajune', 18是函数的实参,分别对应name, age

含有位置参数和默认值参数的例子,如下

def fun(name, age, gender='男'):    # gender 为默认参数,在函数定义时赋初值,仅调用时才可能会变化
print(name, age, gender) fun('ajune', 18) # ajune 18 男
fun('ajune', 18, '男') # ajune 18 男
fun('ajune', 18, '女') # ajune 18 女

默认值参数在调用函数时如果不赋予新的值,那么其值将不会变化。其中函数的参数可以全部是位置参数也可以全部是默认参数。

含有不定长参数的例子之一

def fun(name, *args):
print(name, args) fun('ajune', 18) # ajune (18,)
fun('ajune', 18, '男') # ajune (18, '男')

当含有多个参数时,*args会接收除了位置参数剩余的参数,并且是元组的形式接收,而且当我们传入一个列表时也会被*args接收,可以将额外的参数写成一个元组或者列表,通过下面的方式可以得到相同的效果。

def fun(name, *args):
print(name, args) info = (18, '男')
info1 = [18, '男']
fun('ajune', *info)
fun('ajune', *info1)

含有不定长参数的例子之二

另外一种不定长参数就是**kwargs类型的,特点是只接收键值对形式的额外参数,接收参数也有两种形式,可以直接写成键值对的形式,也可以写成一个字典,将字典作为参数传入

def fun(name, **kwargs):
print(name, kwargs) info = {'age': 18, 'gender': '男'} fun('ajune', age=18, gender='男')
fun('ajune', **info)

可以看出传入的参数从左至右对应,首先位置参数分配完参数,由于后面的就是*args,所以3,4,5会全部被*args接收,而a的值依然是默认值没有改变,如果想要修改的话,在调用时需要键值对的形式,例如这样子写

foo(1, 2, 3, 4, 5, a=9, b=3, c=4, d=5)

。由于后面的是b=3所以会对应形参的b,最后的c=4,d=5便会被**kwargs接收。

3、函数的返回值

python函数可以具备返回值,其中返回值的类型是多种多样的,可以是列表,元组,字典......

使用return可以将某个值返回,但是如果函数中没有写return语句,那么默认返回None,一个函数中只会有一条return语句被执行

函数的返回值可以被其他变量接收。

def fun():
return 'haha' result = fun()
print(result)

函数的返回值可以是一个函数,多用于函数的嵌套


def fun():
def fun1():
return 'haha' return fun1() result = fun()
print(result)

其中函数的返回值还可以是函数名,下面的例子与上面的例子结果是一样的,不同的是返回的是函数名,其实返回的还是函数的内存地址,当被变量接收后,通过变量名()的方式进行调用

def fun():
def fun1():
return 'haha' return fun1 result = fun()
print(result())

函数的return语句里面可以写多个值,当返回时,隐式的以元组方式返回

def fun():
x, y = 1, 2
return x, y result = fun()
print(result) # 打印结果(1, 2)

python函数,定义,参数,返回值的更多相关文章

  1. 9 - Python函数定义-位置参数-返回值

    目录 1 函数介绍 1.1 为什么要使用函数 1.2 Python中的函数 2 函数的基本使用 3 函数的参数 3.1 参数的默认值 3.2 可变参数 3.2.1 可变位置传参 3.2.2 可变关键字 ...

  2. python函数基础-参数-返回值-注释-01

    什么是函数 函数就是有特定功能的工具 # python中有内置函数(python解释器预先封装好的)与自定义函数(用户自定义封装的)之分 为什么要用函数 # 可以减少代码冗余,增加代码复用性 # 使代 ...

  3. python函数1_参数,返回值和嵌套

    函数 将重复的代码,封装到函数,只要使用直接找函数 函数可以增强代码的模块化和提高代码的重复利用率 函数的定义和调用 格式 def 函数名([参数,参数...]): 函数体 定义函数 import r ...

  4. python函数2(返回值、传递列表...)

    python函数2(返回值.传递列表...) 1.返回值 1.1.返回简单的值 #返回简单值 def get_formatted_name(first_name,last_name): "& ...

  5. linux shell自定义函数(定义、返回值、变量作用域)介绍

    http://www.jb51.net/article/33899.htm linux shell自定义函数(定义.返回值.变量作用域)介绍 linux shell 可以用户定义函数,然后在shell ...

  6. python开发初识函数:函数定义,返回值,参数

    一,函数的定义 1,函数mylen叫做函数名 #函数名 #必须由字母下划线数字组成,不能是关键字,不能是数字开头 #函数名还是要有一定的意义能够简单说明函数的功能 2,def是关键字 (define) ...

  7. Python函数变量和返回值

    Python函数的全局变量和局部变量 1.不同的编程语言,程序可以分为函数和过程两大类,函数具有具体返回值,而过程则不具有具体的返回值,python只具有函数,因为对于它的一般函数,其返回值为所具体返 ...

  8. linux shell 自定义函数(定义、返回值、变量作用域)介绍

    linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.下面说说它的定义方法,以及调用需要注意那些事项. 一.定义shell函数(define function) 语法: [ f ...

  9. 转 linux shell自定义函数(定义、返回值、变量作用域)介绍

    linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.下面说说它的定义方法,以及调用需要注意那些事项. 一.定义shell函数(define function) 语法: [ f ...

  10. linux shell学习笔记二---自定义函数(定义、返回值、变量作用域)介绍

    linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.下面说说它的定义方法,以及调用需要注意那些事项. 一.定义shell函数(define function) 语法: [ f ...

随机推荐

  1. elk架构

    (1)Kafka:接收用户日志的消息队列.(2)Logstash:做日志解析,统一成JSON输出给Elasticsearch.(3)Elasticsearch:实时日志分析服务的核心技术,一个sche ...

  2. We're sorry but mobile doesn't work properly without JavaScript enabled. Please enable it to continue.

    vue过程中遇见这个问题:We're sorry but mobile doesn't work properly without JavaScript enabled. Please enable ...

  3. SVN(subversion )服务端和客户端的下载安装使用

    SVN(subversion)官方网站: http://subversion.apache.org/packages.html 一.服务端下载 1.百度搜关键字:subversion  进入subve ...

  4. Vue 组件的通信

    vue不得不了解的就是组件间的数据通信(暂且不谈vuex插件). 通信方式根据组件之间的关系有不同之处. 组件关系有下面三种:父-->子.子-->父.非父子 1.父-->子 父向子传 ...

  5. ad_hoc详解

    import shutil from collections import namedtuple from ansible.parsing.dataloader import DataLoader f ...

  6. Shell 脚本来自动监控 Linux 系统的内存

    # vim /scripts/swap-warning.sh #!/bin/bash #提取本服务器的IP地址信息 IP=`ifconfig eth0 | grep "inet addr&q ...

  7. pyecharts 开发文档

    pyechart 新 版本 https://pyecharts.org/#/zh-cn/quickstart pyecharts 老版本 https://05x-docs.pyecharts.org/ ...

  8. php注意事项|要点

    1. 用单引号代替双引号来包含字符串,这样做会更快一些.因为 PHP 会在双引号包围的 字符串中搜寻变量,单引号则不会,注意:只有 echo 能这么做,它是一种可以把多个字符 串当作参数的“函数”(译 ...

  9. 五十三.Docker概述、部署Docker、Docker镜像、Docker基本命令

    1.安装Docker 准备两台虚拟机,IP为192.168.1.10和192.168.1.20 安装docker-engine 和 docker-engine-selinux 关闭防火墙   **** ...

  10. IIS遇到过的问题

    1. IIS的一个莫名错误Server Application Unavailable http://www.kesion.com/zzcd/asp/aspjq/474.html 新打开这个服务ASP ...