Learning Python 010 函数 1
Python 函数 1
调用函数
举个例子
多于Python内部的函数,你可以在Python的交互式终端中使用help()
函数来查看函数的使用方法。比如:abs()
函数,如果你不知道如何使用它,你可以在Python的交互式终端中输入:
>>> help(abs)
你会看到下面的输出信息:
Help on built-in function abs in module builtins:
abs(x, /)
Return the absolute value of the argument.
它说:你随便输入一个数x,会返回x的绝对值:
>>> abs(-20)
20
>>> abs(-12.32)
12.32
数据类型转换
Python内置了数据类型转换的函数:
>>> int('123')
123
>>> int(12.32)
12
>>> float('12.32')
12.32
>>> str(1.22)
'1.22'
>>> str(10)
'10'
>>> bool(1)
True
>>> bool('')
False
给函数取“别名”
>>> a = abs # 变量a指向abs函数
>>> a(-1) # 所以也可以通过a调用abs函数
1
为什么可以这样做:
因为函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,就是相当于给这个函数起了一个“别名”。
定义函数
自己写一个函数
下面我们写一个获取x的绝对值的函数,来讲讲Python中函数的书写格式:
def my_abs(x):
if x >= 0:
return x
else:
return -x
注意缩进 和
:
。在每一句结尾,你不需要写;
。
空函数
空函数的写法:
def nop():
pass
这里的关键字pass
的意思就是什么都不做。pass
是一个占位符。
空函数怎么用:
如果现在还没想好怎么写函数的代码,就可以先放一个pass
,让代码能运行起来。
举例:if age >= 18:
pass这样就可以在没有完成
if age >= 18
内部的代码,程序依然可以运行。如果缺少pass
,代码运行时会有语法错误。
参数检查
这个参数检查是一个重点。Python语言才会有参数检查。C/C++是不会有的。所以,这里要学会它。其实,就是下面这段代码:
if not isinstance(x, (int, float)):
raise TypeError('bad operand type')
Q:上面这段代码,有什么用啊?
A:我想说的是可有可无。举个例子:
>>> my_abs('A')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in my_abs
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'
你会看到,如果我们个abs()
和my_abs()
函数都参入str数据,得到的错误是不同的。我们写的my_abs()
函数得到的错误是:unorderable types: str() >= int()
,它说:函数内部的这段代码if x >= 0:
正在执行str
数据和int
数据之间的比较。它没有检测到传入参数错误这一直接导致问题的原因,在我们调试程序的时候,这样的报错会误导我们。
所以,如果我们将my_abs()
函数写出下面这个样子:
def my_abs(x):
if not isinstance(x, (int, float)):
raise TypeError('bad operand type')
if x >= 0:
return x
else:
return -x
现在我们在运行程序:
>>> my_abs('A')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in my_abs
TypeError: bad operand type
现在就提示出了真正的错误原因:bad operand type
。意思就是说:传入了错误的数据类型。
返回多个值
Python语言还有一个特点,这个特点是C/C++所没有的:函数可以返回对个值。
import math
def move(x, y, step, angle=0):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny
相当的简单,就是将你想要返回的数据写在return
语句里面。
我们在使用这个函数的时候,同样的带来获取返回值:
>>> x, y = move(100, 100, 60, math.pi / 6)
>>> print(x, y)
151.96152422706632 70.0
其实,我们可以使用一个返回值,就可以获取到所有的返回值:
>>> r = move(100, 100, 60, math.pi / 6)
>>> print(r)
(151.96152422706632, 70.0)
此时,r
是一个元组(tuple)数据类型。返回值按位置赋给元组中对应的元素。
所以,Python函数的返回值其实就是一个元组。
Learning Python 010 函数 1的更多相关文章
- Learning Python 010 函数 2
Python 函数 2 函数的参数 位置参数(普通,正常的参数) 随便编写一个求x^n的值的函数power(x, n): def power(x, n): s = 1 while n > 0: ...
- day python 010 函数(1)
一 函数 定义 : def () 函数是对功能或者动作的封装 def yue (): # 形参列表 # print("拿出手机") # print("打开陌陌" ...
- Python学习教程(learning Python)--2.3.3 Python函数型参详解
本节讨论Python下函数型参的预设值问题. Python在设计函数时,可以给型参预设缺省值,当用户调用函数时可以不输入实参.如果用户不想使用缺省预设值则需要给型参一一赋值,可以给某些型参赋值或不按型 ...
- Python学习入门基础教程(learning Python)--2.3.3Python函数型参详解
本节讨论Python下函数型参的预设值问题. Python在设计函数时,可以给型参预设缺省值,当用户调用函数时可以不输入实参.如果用户不想使用缺省预设值则需要给型参一一赋值,可以给某些型参赋值或不按型 ...
- python第六天 函数 python标准库实例大全
今天学习第一模块的最后一课课程--函数: python的第一个函数: 1 def func1(): 2 print('第一个函数') 3 return 0 4 func1() 1 同时返回多种类型时, ...
- Learning Python 002 print() 和 input()
Python print() 和 input() print()函数 print()函数可以向终端中输入指定的内容. 输出当个字符串 .py文件中,输入下面的代码,并保存: print('hello ...
- python的函数
函数一词起源于数学,但是在编程中的函数和数学中的有很大不同.编程中的函数式组织好的,可重复使用的,用于实现单一功能或相关联功能的代码块. 我们在学习过程中已经使用过一些python内建的函数,如pri ...
- python strip()函数 介绍
python strip()函数 介绍,需要的朋友可以参考一下 函数原型 声明:s为字符串,rm为要删除的字符序列 s.strip(rm) 删除s字符串中开头.结尾处,位于 rm删除 ...
- python split()函数
Python split()函数 函数原型: split([char][, num])默认用空格分割,参数char为分割字符,num为分割次数,即分割成(num+1)个字符串 1.按某一个字符分割. ...
随机推荐
- Data Structure Linked List: Write a function to reverse a linked list
iterative太简单不写了 http://www.geeksforgeeks.org/write-a-function-to-reverse-the-nodes-of-a-linked-list/ ...
- web前端框架之自定义form表单验证
自定义form验证初试 .在后端创建一个类MainForm,并且在类中自定义host ip port phone等,然后写入方法,在post方法中创建MainForm对象,并且把post方法中的sel ...
- poj 3278 Catch That Cow-搜索进阶-暑假集训
Catch That Cow Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Subm ...
- sql的执行过程
from ===> where ===> group by ===> select ===>order by 这个执行流程 很重要~~
- linux常见命令2
systemctl set-hostname HOSTNAME 在centos7上设置主机名,永久有效 curl -O -L http://www.gnu.org/software/gettext/ ...
- 矩阵内积和Schur补
> Many problems in the field of signal processing have been expended into matrix problems.So it's ...
- php: 0跟字符串做比较永远是true。 php大bug。
php: 0跟字符串做比较永远是true. php大bug. 如: $a = 0; if( $a == 'excel') { echo "yes"; }else{ echo &qu ...
- 分享知识-快乐自己:Struts2 前台日期到后台的日期格式转换
案例目录: 关键代码展示: DateConverter: package com.mlq.util; import com.opensymphony.xwork2.conversion.TypeCon ...
- 十六 Django框架,信号
Django中提供了“信号调度”,用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者. 也就是当程序有指定动作时,触发一个信号函数 1.Django内置信 ...
- (转)Java 调用 C++ (Java 调用 dll)
转自: http://www.cnblogs.com/baokang/p/4979243.html 因为要做点图形处理的项目,需要在Java中调用dll库,所以开发的第一步是研究了一下Java Jni ...