Python函数用def指定函数名,可以指定输入参数,可以指定参数的默认值,也可以用return指定返回值。
调用时除了默认的位置赋值,也可按关键字赋值。

一、函数不带参数、没有返回值

def hello():
print("hello world")

二、函数带参数、没有返回值

def hello(name):
print("hello,", name)

三、函数指定返回值

1、一般情况返回值

def hello(name):
return "hello," + name

2、返回True或False
Python中用内置函数bool传递任何对象来确定是True或False。
1)如果计算为0、值None、一个空串或一个空的内置数据结构,则为False

>>> bool(0)
False
>>> bool(0.0)
False
>>> bool(None)
False
>>> bool('')
False
>>> bool(' ')
True
>>> bool(0)
False
>>> bool(0.0)
False
>>> bool(None)
False
>>> bool('')
False
>>> bool([])
False

2)任何非空的数据结构都计算为True

>>> bool(1)
True
>>> bool(-1)
True
>>> bool(0.01)
True
>>> bool(' ')
True
>>> bool([1,2])
True
>>> bool({'a',1})
True

四、函数的说明文档
1、使用三重引号字符串写函数的说明文档

def hello():
"""函数例子
输出hello world"""
print("hello world")

函数第二行的三重引号字符串,称为一个docstring(文档字符串),主要是作为一个文档,用来描述一个函数的用途,可以跨多行。

在Python Shell中输入“hello(”时会自动显示说明文档

也可以用help请求函数文档,结果如下:

>>> help(hello)
Help on function hello in module __main__: hello()
函数例子
输出hello world

2、使用注解改进文档
Python 3支持一种称为注解的记法,描述函数返回类型以及所有参数类型

def hello(name:list) -> str:
"""输出姓名列表"""
return ",".join(name)

代码中:list说明参数是一个列表,-> str说明返回值是字符串。

、指定参数的默认值

为某个参数默认值后,调用函数时,此参数可提供,也可不提供。

def fun1(p1:float, p2:int=1):
return p1 * p2

上面函数的调用例子

>>> fun1(50)
50
>>> fun1(50,2)
100
>>>

六、关键字赋值

函数默认情况下是按位置赋值的,也可以按参数名来引用参数,称为关键字赋值。

以上面函数fun1为例,调用如下

>>> fun1(p1=50)
50
>>> fun1(p2=2,p1=50)
100
>>>

 七、一个函数的参数可以为另一个函数

下面test函数接收一个函数对象func作为参数,test函数的返回结果是func的执行结果

def test(func: object, value: object) -> object:
return func(value) print(test(id, 123))
print(test(id, test))
print(test(type, test))

运行结果:

8791433376208
40410648
<class 'function'>

八、从函数返回一个函数

def outer():
def inner():
print('这是内部函数') print('这是外部函数')
return inner i = outer()
print(type(i))
i()

运行结果:type(i)的返回结果说明i是一个函数。

这是外部函数
<class 'function'>
这是内部函数

九、处理任意数量和类型的函数参数
(1)使用*接收一个任意(0或多个)的参数列表

def test(*args):
for a in args:
print(a, end=' ')
if args:
print() test() #不提供参数时,不做什么
test(1) #输出:1
test(1,2,'a') #输出: 1 2 a list = [1,2,3,'a','bc']
test(list) #输出:[1, 2, 3, 'a', 'bc']
test(*list) #加“*”会展开参数列表,输出:1 2 3 a bc

(2)使用**接收任意多个关键字参数

def test2(**kwargs):
for k,v in kwargs.items():
print(k, v, sep='->', end=' ')
if kwargs:
print() test2() #不提供参数时,不做什么
test2(a=10,b='abc') #输出:a->10 b->abc dict = {'id':1,'name':'张三'}
test2(**dict) #也可使用**,输出:id->1 name->张三

(3)同时使用*args,**kwargs

def test(*args, **kwargs):
if args:
for a in args:
print(a, end=' ')
print()
if kwargs:
for k,v in kwargs.items():
print(k, v, sep='->', end=' ')
print() test() #不提供参数时,不做什么
test(1) #输出:1
test(a=10,b='abc') #输出:a->10 b->abc
test(1,a=10,b='abc') #输出:1 a->10 b->abc

Python函数使用的更多相关文章

  1. python 函数之day3

    一 函数的语法及特性 什么是函数? 定义:函数是一个功能通过一组语句的集合,由名字(函数名)将其封装起来的代码块,要想执行这个函数,只要调用其函数名即可. 特性: 减少重复代码 使程序变的可扩展 使程 ...

  2. Python函数作用域的查找顺序

    函数作用域的LEGB顺序 1.什么是LEGB? L:local 函数内部作用域 E:enclosing 函数内部与内嵌函数之间 G:global 全局作用域 B:build-in 内置作用域 2.它们 ...

  3. Python函数讲解

    Python函数

  4. Python函数信息

    Python函数func的信息可以通过func.func_*和func.func_code来获取 一.先看看它们的应用吧: 1.获取原函数名称: 1 >>> def yes():pa ...

  5. Python函数参数默认值的陷阱和原理深究"

    本文将介绍使用mutable对象作为Python函数参数默认值潜在的危害,以及其实现原理和设计目的 本博客已经迁移至: http://cenalulu.github.io/ 本篇博文已经迁移,阅读全文 ...

  6. Python开发【第四章】:Python函数剖析

    一.Python函数剖析 1.函数的调用顺序 #!/usr/bin/env python # -*- coding:utf-8 -*- #-Author-Lian #函数错误的调用方式 def fun ...

  7. Python函数解析

    对于Python的函数,我们需要记住的是: 1. 函数的默认返回值是None. 2. python是一个自上而下逐行解释并执行的语言.因此,函数的定义必须在函数被调用之前.同名的函数,后定义的会覆盖前 ...

  8. Python入门笔记(18):Python函数(1):基础部分

    一.什么是函数.方法.过程 推荐阅读:http://www.cnblogs.com/snandy/archive/2011/08/29/2153871.html 一般程序设计语言包含两种基本的抽象:过 ...

  9. Python函数1

    Python 函数命令的使用 想想我们之前数学中学到的函数,首先我们需要定义一个函数,例如f(x)=x, 当x输入任意数的时候,f(x)都能输出和x相等的数值. 那么在Python中是如何实现的呢? ...

  10. python函数传参是传值还是传引用?

    首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传 ...

随机推荐

  1. java基础(4):引用数据类型、流程控制语句

    1. 引用数据类型 1.1 Scanner类 我们要学的Scanner类是属于引用数据类型,我们先了解下引用数据类型. 引用数据类型的使用: 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有 ...

  2. 彻底理解volatile,领悟其中奥妙

    本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...

  3. IO相关Demo

    这几天复习了IO相关知识 只为记录,好记性不如烂笔头 有误请指正 ありがとうございます. 我的公众号 作者:晨钟暮鼓c个人微信公众号:程序猿的月光宝盒 1.判断存在,存在改名,并延迟删除,不存在新建 ...

  4. echarts 饼图 + 全屏显示

    效果图: 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  5. 项目中使用http referer,为了盗取图片资源

    项目背景:因为图片的数据是爬取的别人的图片,而且保存的数据仅仅是图片地址链接,为了减少数据存储和服务器压力,但是这就引发一个问题,有的图片地址没有做防盗处理,可以随意的下载使用:但有些图片的服务器做了 ...

  6. 搭建 Telegraf + InfluxDB + Grafana 监控遇到几个小问题

    1:如果同一台服务器上安装有多个MongoDB实例,telegraf.conf 中关于 MongoDB 如何配置?配置数据在[INPUT PLUGINS的[[inputs.mongodb]]]部分. ...

  7. Export Receives The Errors ORA-1555 ORA-22924 ORA-1578 ORA-22922 (Doc ID 787004.1)

    Export Receives The Errors ORA-1555 ORA-22924 ORA-1578 ORA-22922 (Doc ID 787004.1) APPLIES TO: Oracl ...

  8. Linux-3.14.12内存管理笔记【建立内核页表(3)

    前面已经分析了内核页表的准备工作以及内核低端内存页表的建立,接着回到init_mem_mapping()中,低端内存页表建立后紧随着还有一个函数early_ioremap_page_table_ran ...

  9. macOS 安装 Docker Desktop CE(转)

    现在基本上都使用docker进行部署项目,所以还是有必要学习下,关于docker的简介这里就不在描述,本文转载自https://yeasy.gitbooks.io/docker_practice/co ...

  10. WPF DataGrid 绑定数据及时更新的处理

    原文:WPF DataGrid 绑定数据及时更新的处理 默认情况下datagrid 绑定数据源后,在界面编辑某一列后,数据不会及时更新到内存对象中.如在同一行上有一个命令对来获取 当前选中行(内存对象 ...