参考:定义函数

Note:

先看一段代码实例(Barefoot topo.py):

def read_topo():
nb_hosts = 0
nb_switches = 0
links = []
with open("topo.txt", "r") as f:
line = f.readline()[:-1]
w, nb_switches = line.split()
assert(w == "switches")
line = f.readline()[:-1]
w, nb_hosts = line.split()
assert(w == "hosts")
for line in f:
if not f: break
a, b = line.split()
links.append( (a, b) )
return int(nb_hosts), int(nb_switches), links

函数功能是,打开topo.txt文件,根据文件内容确定host、switch、link数目,并返回。

函数调用处:

nb_hosts, nb_switches, links = read_topo()

1.Python中函数定义:def function_name() :

2.函数内部通过条件判断和循环可以实现非常复杂的逻辑。当遇到return语句,函数结束并返回参数。

3.可以通过from [name] import [function_name]导入函数,注意导入的文件后缀不加.py。

eg.

sh-3.2# more function1.py
#!/usr/bin/env python3 def my_function(x) :
if str(x) == 'Chen' :
b = 'Good'
elif str(x) == 'Li' :
b = 'Better'
else :
b = 'Best' print(b) return b sh-3.2# python3
Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 26 2016, 10:47:25)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from function1 import my_function
>>> my_function('Chen')
Good
'Good'
>>>

4.如果在一个判断语句中什么都不想做,则可以使用pass语句。

eg.

if age >= 18 :
pass

5.参数检查。

如果传入的参数类型不对,Python解释器无法帮助我们解释。这个时候可以在函数中通过定义raise语句抛出错误,如:

eg.

def my_function(age, x) :

	if age < 0:
raise RuntimeError('age < 0')
else :
pass if str(x) == 'Chen' :
b = 'Good'
elif str(x) == 'Li' :
b = 'Better'
else :
b = 'Best' print(b) return b
>>> from function1 import my_function
>>> my_function(-1, 'Chen')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/wasdns/Desktop/PythonLearn/function1.py", line 6, in my_function
raise RuntimeError('age < 0')
RuntimeError: age < 0
>>>

也可以通过方法 isinstance() 进行参数类型检查:

def my_function(age, x) :

	if age < 0:
raise RuntimeError('age < 0')
else :
pass if not isinstance(x, (str)) :
raise TypeError('bad operand type')
else :
pass
>>> from function1 import my_function
>>> my_function(1, 100)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/wasdns/Desktop/PythonLearn/function1.py", line 11, in my_function
raise TypeError('bad operand type')
TypeError: bad operand type
>>>

6.函数返回多个值。Python的函数允许返回多个值,其本质是返回一个tuple。

在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple,但写起来更方便。

练习:

请定义一个函数quadratic(a, b, c),接收3个参数,返回一元二次方程:

ax2 + bx + c = 0

的两个解.

不考虑复数:

#!/usr/bin/env python3

import math

def quadratic(a, b, c) :

	q = b*b - 4*a*c

	if q > 0 :
x1 = -b + math.sqrt(q)
x2 = -b - math.sqrt(q)
return x1/(2*a), x2/(2*a)
else :
print('No solutions')

2017/1/28

Python学习札记(十一) Function2 函数定义的更多相关文章

  1. Python学习札记(十三) Function3 函数参数二

    参考:函数参数 Note A.关键字参数: 1.关键字参数:**kw 可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple.而关键字参数允许你传入0个或任意个含参数名的 ...

  2. python学习(十一)函数、作用域、参数

    定义和调用函数 在这里函数的定义和调用和一般的语句没什么不一样,感觉函数也是对象 #!/usr/bin/python def times(x, y):                # 定义函数    ...

  3. Python学习笔记之常用函数及说明

    Python学习笔记之常用函数及说明 俗话说"好记性不如烂笔头",老祖宗们几千年总结出来的东西还是有些道理的,所以,常用的东西也要记下来,不记不知道,一记吓一跳,乖乖,函数咋这么多 ...

  4. Python学习札记(十二) Function3 函数参数一

    参考:函数参数 Note 1.Python的函数定义非常简单,但灵活度却非常大.除了正常定义的必选参数外,还可以使用默认参数.可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以 ...

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

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

  6. Python学习之路6☞函数,递归,内置函数

    一python中的函数 函数是逻辑结构化和过程化的一种编程方法. python中函数定义方法: def test(x): "The function definitions" x+ ...

  7. python 学习笔记6(函数)

    函数 定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可 特性: 1.减少代码重复 2.保持代码的一致性 3.方便修改,可扩展性 函数的创建 #简单 ...

  8. python学习小结3:函数

    Python是对接口编程,而不是对数据类型编程.例如我们定义了一个函数,在函数里用到了in这个接口,那么只要传入的参数实现了这个接口就可以,我们不在乎它是list还是tuple. 简单的函数 使用de ...

  9. python学习笔记12(函数三): 参数类型、递归、lambda函数

    一.函数参数的类型 之前我们接触到的那种函数参数定义和传递方式叫做位置参数,即参数是通过位置进行匹配的,从左到右,依次进行匹配,这个对参数的位置和个数都有严格的要求.而在Python中还有一种是通过参 ...

随机推荐

  1. SQL Server 常用分页SQL(转)

    发现网上好多都是错的.网上经常查到的那个Top Not in 或者Max 大部分都不实用,很多都忽略了Order和性能问题.为此上网查了查,顺带把2000和2012版本的也补上了. 先说说网上常见SQ ...

  2. GraphicsMagick 1.3.25 Linux安装部署

    1.安装相关依赖包 yum install -y gcc libpng libjpeg libpng-devel libjpeg-devel ghostscript libtiff libtiff-d ...

  3. jQuery -&gt; 使用andSelf()来包括之前的选择集

    版权声明:本文为博主原创文章.转载请注明出处 https://blog.csdn.net/FeeLang/article/details/26254793 当我们使用Destructive Metho ...

  4. 0602-Zuul构建API Gateway-Zuul Http Client、cookie、header

    一.Zuul Http Client zuul使用的默认HTTP客户端现在由Apache HTTP Client支持,而不是已弃用的Ribbon RestClient.要使用RestClient或使用 ...

  5. MyBatis3用户指南

    1. 范围和生命周期     SqlSessionFactoryBuilder -->SqlSessionFactory-->SqlSession-->Mapper 实例 SqlSe ...

  6. linux中执行定时任务对oracle备份(crontab命令)

    执行定时任务对oracle表数据备份: 1.创建sh脚本 [oracle@localhost ~]$ vi bak.sh 2.添加脚本内容 #!/bin/bash #:本脚本自动备份7天的数据库,每次 ...

  7. 15.遇到window leaked的解决方法

    遇到这个可能是android:configChanges没有配置好 可以试试配置为这个 mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navig ...

  8. 多个JS文件性能优化

    页面中引入的JS文件是阻塞式加载的,这样会影响页面性能.以下是JS文件性能优化方法: 一:将所有的<script>标签放到页面底部,也就是</body>闭合标签之前,这能确保在 ...

  9. Cloudflare发布全球最快的DNS

    宣布1.1.1.1:速度最快,隐私优先的消费者DNS服务   Cloudflare的使命是帮助建立更好的互联网.今天我们很高兴能够在推出1.1.1.1--互联网最快,首先保护隐私的消费者DNS服务的同 ...

  10. Latch free等待事件

    Latch free等待事件的三个参数:p1-latch的地址:p2-latch编号:p3-请求次数.从oracle10g起,latchfree不再包含所有的latch等待,有些latch等待可能表现 ...