实例讲解Python中函数的调用与定义


Posted in Python onMarch 14, 2016

调用函数:

#!/usr/bin/env python3 
# -*- coding: utf-8 -*- 
 
# 函数调用 
>>> abs(100) 
100 
>>> abs(-110) 
110 
>>> abs(12.34) 
12.34 
>>> abs(1, 2) 
Traceback (most recent call last): 
 File "<stdin>", line 1, in <module> 
TypeError: abs() takes exactly one argument (2 given) 
>>> abs('a') 
Traceback (most recent call last): 
 File "<stdin>", line 1, in <module> 
TypeError: bad operand type for abs(): 'str' 
>>> max(1, 2) 
2 
>>> max(2, 3, 1, -5) 
3 
>>> int('123') 
123 
>>> int(12.34) 
12 
>>> str(1.23) 
'1.23' 
>>> str(100) 
'100' 
>>> bool(1) 
True 
>>> bool('') 
False 
>>> a = abs # 变量a指向abs函数,相当于引用 
>>> a(-1) # 所以也可以通过a调用abs函数 
1 
 
>>> n1 = 255 
>>> n2 = 1000 
>>> print(hex(n1)) 
0xff 
>>> print(hex(n2)) 
0x3e8

定义函数:

#!/usr/bin/env python3 
# -*- coding: utf-8 -*- 
 
#函数定义 
def myAbs(x): 
 if x >= 0: 
  return x 
 else: 
  return -x 
 
a = 10 
myAbs(a) 
 
def nop(): # 空函数 
 pass

pass语句什么都不做 。
实际上pass可以用来作为占位符,比如现在还没想好怎么写函数代码,就可以先写一个pass,让代码运行起来。  
  

if age >= 18: 
 pass 
#缺少了pass,代码就会有语法错误 
>>> if age >= 18: 
... 
 File "<stdin>", line 2 
 
 ^ 
IndentationError: expected an indented block 
 
>>> myAbs(1, 2) 
Traceback (most recent call last): 
 File "<stdin>", line 1, in <module> 
TypeError: myAbs() takes 1 positional argument but 2 were given 
>>> myAbs('A') 
Traceback (most recent call last): 
 File "<stdin>", line 1, in <module> 
 File "<stdin>", line 2, in myAbs 
TypeError: unorderable types: str() >= int() 
>>> abs('A') 
Traceback (most recent call last): 
 File "<stdin>", line 1, in <module> 
TypeError: bad operand type for abs(): 'str' 
 
def myAbs(x): 
 if not isinstance(x, (int, float)): 
  raise TypeError('bad operand type') 
 if x >= 0: 
  return x 
 else: 
  return -x 
 
>>> myAbs('A') 
Traceback (most recent call last): 
 File "<stdin>", line 1, in <module> 
 File "<stdin>", line 3, in myAbs 
TypeError: bad operand type

 
返回两个值?  

import math 
def move(x, y, step, angle = 0): 
 nx = x + step * math.cos(angle) 
 ny = y - step * math.sin(angle) 
 return nx, ny 
 
>>> x, y = move(100, 100, 60, math.pi / 6) 
>>> print(x, y) 
151.96152422706632 70.0

 
其实上面只是一种假象,Python函数返回的仍然是单一值 。

>>> r = move(100, 100, 60, math.pi / 6) 
>>> print(r) 
(151.96152422706632, 70.0)

实际上返回的是一个tuple! 
但是,语法上,返回一个tuple可以省略括号,  而多个变量可以同时接受一个tuple,按位置赋给对应的值。 
所以,Python的函数返回多值实际就是返回一个tuple,但是写起来更方便。  
  函数执行完毕也没有return语句时,自动return None。 
 
练习  :

import math 
def quadratic(a, b, c): 
 x1 = (-b + math.sqrt(b * b - 4 * a * c)) / (2 * a) 
 x2 = (-b - math.sqrt(b * b - 4 * a * c)) / (2 * a) 
 return x1, x2 
 
x1, x2 = quadratic(2, 5, 1) 
print(x1, x2) 
 
>>> import math 
>>> def quadratic(a, b, c): 
...  x1 = (-b + math.sqrt(b * b - 4 * a * c)) / (2 * a) 
...  x2 = (-b - math.sqrt(b * b - 4 * a * c)) / (2 * a) 
...  return x1, x2 
... 
>>> x1, x2 = quadratic(2, 5, 1) 
>>> print(x1, x2) 
-0.21922359359558485 -2.2807764064044154
Python 相关文章推荐
解决python3爬虫无法显示中文的问题
Apr 12 Python
Python中偏函数用法示例
Jun 07 Python
超简单的Python HTTP服务
Jul 22 Python
Python实现决策树并且使用Graphviz可视化的例子
Aug 09 Python
Pytorch中Tensor与各种图像格式的相互转化详解
Dec 26 Python
Python3连接Mysql8.0遇到的问题及处理步骤
Feb 17 Python
TensorFlow2.X使用图片制作简单的数据集训练模型
Apr 08 Python
django为Form生成的label标签添加class方式
May 20 Python
pycharm 实现本地写代码,服务器运行的操作
Jun 08 Python
python 使用多线程创建一个Buffer缓存器的实现思路
Jul 02 Python
Django框架安装及项目创建过程解析
Sep 14 Python
python boto和boto3操作bucket的示例
Oct 30 Python
Python使用multiprocessing实现一个最简单的分布式作业调度系统
Mar 14 #Python
简单讲解Python中的字符串与字符串的输入输出
Mar 13 #Python
深入解析Python中的list列表及其切片和迭代操作
Mar 13 #Python
Python中的列表生成式与生成器学习教程
Mar 13 #Python
jupyter安装小结
Mar 13 #Python
Ubuntu下安装PyV8
Mar 13 #Python
Python连接MySQL并使用fetchall()方法过滤特殊字符
Mar 13 #Python
You might like
用PHP为SHOPEX增加日志功能代码
2010/07/02 PHP
使用openssl实现rsa非对称加密算法示例
2014/01/24 PHP
PHP写日志的实现方法
2014/11/05 PHP
基于thinkPHP实现的微信自定义分享功能示例
2016/09/23 PHP
CL vs ForZe BO5 第二场 2.13
2021/03/10 DOTA
JS下高效拼装字符串的几种方法比较与测试代码
2010/04/15 Javascript
Extjs Gird 支持中文拼音排序实现代码
2013/04/15 Javascript
jquery 实现上下滚动效果示例代码
2013/08/09 Javascript
jquery弹出框的用法示例(2)
2013/08/26 Javascript
js防止DIV布局滚动时闪动的解决方法
2014/10/30 Javascript
浅谈JavaScript 框架分类
2014/11/10 Javascript
通过伪协议解决父页面与iframe页面通信的问题
2015/04/05 Javascript
Adapter适配器模式在JavaScript设计模式编程中的运用分析
2016/05/18 Javascript
JavaScript实现广告弹窗效果
2016/08/09 Javascript
JS实现鼠标滑过显示边框的菜单效果
2016/09/21 Javascript
扩展Bootstrap Tooltip插件使其可交互的方法
2016/11/07 Javascript
简单理解js的prototype属性及使用
2016/12/07 Javascript
jQuery实现的简单排序功能示例【冒泡排序】
2017/01/13 Javascript
vue-cli 3.0 自定义vue.config.js文件,多页构建的方法
2018/09/19 Javascript
在vue-cli中引入lodash.js并使用详解
2019/11/13 Javascript
JS实现滑动导航效果
2020/01/14 Javascript
在vue中实现清除echarts上次保留的数据(亲测有效)
2020/09/09 Javascript
Python实现的端口扫描功能示例
2018/04/08 Python
python matplotlib绘图,修改坐标轴刻度为文字的实例
2018/05/25 Python
Python实现按逗号分隔列表的方法
2018/10/23 Python
Java面试题汇总
2015/12/06 面试题
中学实习教师自我鉴定
2013/12/12 职场文书
后备干部考察材料
2014/02/12 职场文书
遵纪守法演讲稿
2014/05/23 职场文书
全陪导游词
2015/02/04 职场文书
销售员岗位职责
2015/02/10 职场文书
2015年保卫科工作总结
2015/05/14 职场文书
六一儿童节园长致辞
2015/07/31 职场文书
2019消防宣传标语!
2019/07/10 职场文书
Jpa Specification如何实现and和or同时使用查询
2021/11/23 Java/Android
解决redis批量删除key值的问题
2022/03/23 Redis