一、概述

  python和其他高级语言一样,支持函数

  注意和scala不一样,结果必须使用return,否则默认return None!这和scala最后一个值作为返回是不一样的!

二、函数调用

  和其他语言一样,写出函数名,传入合适的参数即可,例如调用内置函数abs:

>>> abs(-1)
1

  函数支持别名:

>>> a = abs # 变量a指向abs函数
>>> a(-1) # 所以也可以通过a调用abs函数
1

  如果传入了错误的参数,Python会报TypeError错误

  数据类型在Python中的转换可以通过相关的函数:

>>> int('')
1
>>> str(1)
''

三、函数定义

  定义也是使用和scala一致的def关键字:

def fun1(x):
if x > 0:
print('正数')
return x
else:
print('负数')
return -x

  如果什么都不做,那就用pass(如果返回空,使用return None

def nop():
pass

  由python这个函数定义也能知道,Python只能给我们做参数个数的检查,参数类型无法检查。要检查参数,只能通过手动编码使用instance实现:

def my_abs(x):
if not isinstance(x, (int, float)):
raise TypeError('bad operand type')
if x >= 0:
return x
else:
return -x

  并且,在Python这类有tuple的语言中,是可以返回多个值的!

def fun1(x,y):
if x > 0:
return x,y
else:
return x,y
a,b = fun1(1,2)

  当然,内在的是返回了一个tuple,只是返回值可以省略这个()来显示表明这是一个tuple

  默认参数:
    定义带有默认参数的函数时,注意默认参数必须放在后面且必须是不可变对象

def fun1(x,y=1):
if x > 0:
return x+y
else:
return x-y

  可变参数

    在参数前面加一个星号*即可,内部使用的是一个tuple包装的

def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum

    如果要使用list或者tuple作为可变参数,类似calc(list[0],list[1]),可以使用*进行参数转换:

calc(*list)

  关键字参数

    在参数前面加两个星号**即可,内部会把这个关键字参数转换为dict(也就是map)

def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)
>>> person('Bob', 35, city='Beijing')
name: Bob age: 35 other: {'city': 'Beijing'}
>>> person('Adam', 45, gender='M', job='Engineer')
name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}

  //内部接收的dict是外部的副本,不会对传入的作改变

  命名关键字参数(Python3独有)

    在参数中使用*作为一个分隔符即可,这样可以对传入的关键字参数作命名检查,只能传入指定名字的关键字参数

def person(name, age, *, city, job):
print(name, age, city, job)

  这样,就可以对入参作命名检查了,只能传入city=xx,job=xx:

 person('Jack', 24, city='Beijing', job='Engineer')

  多种参数组合时,顺序必须严格控制:
    必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

四、递归函数

  和其他语言的递归函数是类似的:

def fact(n):
if n==1:
return 1
return n * fact(n - 1)

 

Python3入门(四)——Python函数的更多相关文章

  1. python3 入门 (四) 类与继承

    Python 类 Python中的类提供了面向对象编程的所有基本功能:类的继承机制允许多个基类,派生类可以覆盖基类中的任何方法,方法中可以调用基类中的同名方法. 对象可以包含任意数量和类型的数据. p ...

  2. Python学习笔记(四)Python函数的参数

    Python的函数除了正常使用的必选参数外,还可以使用默认参数.可变参数和关键字参数. 默认参数 基本使用 默认参数就是可以给特定的参数设置一个默认值,调用函数时,有默认值得参数可以不进行赋值,如: ...

  3. Python3入门系列之-----函数

    什么是函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自己 ...

  4. Python入门之 Python内置函数

    Python入门之 Python内置函数 函数就是以功能为导向,一个函数封装一个功能,那么Python将一些常用的功能(比如len)给我们封装成了一个一个的函数,供我们使用,他们不仅效率高(底层都是用 ...

  5. Python3入门(三)——Python基础语法

    一.基本语法 1.行和缩进 Python中,不使用括号来表示代码的类和函数定义块或流程控制. 代码块是由行缩进,缩进位的数目是可变的,但是在块中的所有语句必须缩进相同的量. 如下所示: a = 100 ...

  6. python3入门之函数

    相信大家学习过其他语言,懂得函数的作用.简单的说函数最好的作用就是可以使程序变得懒惰.python作为后起之秀,当然也会拥有函数这个有用的东西: 创建函数 使用def语句即可创建函数,如创建一个用来生 ...

  7. python学习【第四篇】python函数 (一)

    一.函数的介绍 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以 ...

  8. Python入门篇-生成器函数

    Python入门篇-生成器函数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.生成器概述 1>.生成器generator 生成器指的是生成器对象,可以由生成器表达式得到, ...

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

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

  10. python学习笔记--Django入门四 管理站点--二

    接上一节  python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...

随机推荐

  1. React之函数中的this指向

    我们都知道在React中使用函数时,有两种写法,一是回调函数,二是直接调用,但需要在构造函数中绑定this,只有这样,函数中的this才指向本组件 总结一下没有绑定this的函数中的this指向 不管 ...

  2. 【Redis】Redis学习(二) master/slave、sentinel、Cluster简单总结

    项目中用到Redis,所以准备学习一下,感觉Redis的概念还是很多的,什么主从模式.sentinel模式.集群模式的,一下子都晕了,我觉得还是有必要先理清这些基本概念再说. 一.单节点实例 单节点实 ...

  3. Hive分组取Top N

    Hive在0.11.0版本开始加入了row_number.rank.dense_rank分析函数,可以查询分组排序后的top值   说明: row_number() over ([partition ...

  4. [Android] 图片裁剪总结——自定义裁剪工具

    上次弄完调用系统裁剪之后,我又试着做一个自定义的裁剪工具. 原文地址请保留http://www.cnblogs.com/rossoneri/p/3988405.html 老习惯,文章开始前还是先把我参 ...

  5. LeetCoder题解之Find All Anagrams in a String

    1.题目描述 2.题目分析 直接使用 哈希表记录子串的信息,然后对比两个哈希表信息即可 3.代码 vector<int> findAnagrams(string s, string p) ...

  6. Innodb页面存储结构-2

    上一篇<Innodb页面存储结构-1>介绍了Innodb页面存储的总体结构,本文会介绍页面的详细内容,主要包括页头.页尾和记录的详细格式. 学习数据结构时都说程序等于数据结构+算法,而在i ...

  7. Python tuple

    元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表 语法 names = (a,b,c) 它只有2个方法,一个是count,一个是index. 当然也有可变元祖: 可 ...

  8. IOS系统中,Web应用程序的cookie读写

    在测试项目兼容性时,发现在iphone的浏览器中,cookie的读写异常,数据一致是错误的 最后发现cookie中的value需要进行encode  = =!...... 写入cookie时,使用Ht ...

  9. Grafana是一个可视化面板-安装配置介绍

    Grafana是一个可视化面板(Dashboard),有着非常漂亮的图表和布局展示,功能齐全的度量仪表盘和图形编辑器,支持Graphite.zabbix.InfluxDB.Prometheus和Ope ...

  10. mysql 表格操作指令大全(Show、desc、create、insert into、delete、select、drop、update、alter)

    使用数据库 use 数据库名 eg: use weiying 2. 查看库里所有的表 Show tables 3.查看所表的结构  desc 表名 desc score 4.建表create tabl ...