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函数的返回值其实就是一个元组


参考网站:

http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014316784721058975e02b46cc45cb836bb0827607738d000

Learning Python 010 函数 1的更多相关文章

  1. Learning Python 010 函数 2

    Python 函数 2 函数的参数 位置参数(普通,正常的参数) 随便编写一个求x^n的值的函数power(x, n): def power(x, n): s = 1 while n > 0: ...

  2. day python 010 函数(1)

    一 函数 定义 : def () 函数是对功能或者动作的封装 def yue (): # 形参列表 # print("拿出手机") # print("打开陌陌" ...

  3. Python学习教程(learning Python)--2.3.3 Python函数型参详解

    本节讨论Python下函数型参的预设值问题. Python在设计函数时,可以给型参预设缺省值,当用户调用函数时可以不输入实参.如果用户不想使用缺省预设值则需要给型参一一赋值,可以给某些型参赋值或不按型 ...

  4. Python学习入门基础教程(learning Python)--2.3.3Python函数型参详解

    本节讨论Python下函数型参的预设值问题. Python在设计函数时,可以给型参预设缺省值,当用户调用函数时可以不输入实参.如果用户不想使用缺省预设值则需要给型参一一赋值,可以给某些型参赋值或不按型 ...

  5. python第六天 函数 python标准库实例大全

    今天学习第一模块的最后一课课程--函数: python的第一个函数: 1 def func1(): 2 print('第一个函数') 3 return 0 4 func1() 1 同时返回多种类型时, ...

  6. Learning Python 002 print() 和 input()

    Python print() 和 input() print()函数 print()函数可以向终端中输入指定的内容. 输出当个字符串 .py文件中,输入下面的代码,并保存: print('hello ...

  7. python的函数

    函数一词起源于数学,但是在编程中的函数和数学中的有很大不同.编程中的函数式组织好的,可重复使用的,用于实现单一功能或相关联功能的代码块. 我们在学习过程中已经使用过一些python内建的函数,如pri ...

  8. python strip()函数 介绍

    python strip()函数 介绍,需要的朋友可以参考一下   函数原型 声明:s为字符串,rm为要删除的字符序列 s.strip(rm)        删除s字符串中开头.结尾处,位于 rm删除 ...

  9. python split()函数

    Python split()函数 函数原型: split([char][, num])默认用空格分割,参数char为分割字符,num为分割次数,即分割成(num+1)个字符串 1.按某一个字符分割. ...

随机推荐

  1. [原创]java WEB学习笔记39:EL中的运算符号(算术运算符,关系运算符,逻辑运算符,empty运算符,条件运算符,括号运算符)

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  2. 【leetcode刷题笔记】Unique Binary Search Trees

    Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...

  3. debian下蓝牙适配器的配置和使用

    本文打算将蓝牙适配器和手机蓝牙进行配对. 买了个支持蓝牙4.0协议的蓝牙适配器,将其插入到pc(debian 7.4)的usb口. 查看手机蓝牙信息: 选择手机中"设置"-> ...

  4. Android电池驱动【转】

    本文转载自:http://blog.sina.com.cn/s/blog_66a6a5ec0100n6ej.html Android的电池的管理分为三个部分:Java部分,JNI部分以及kenel部分 ...

  5. Delphi 中关闭指定进程的方法

    Uses Windows, SysUtils, Tlhelp32 ; Function KillTask( ExeFileName: String ): Integer ; //关闭进程 Functi ...

  6. 基于js的网页换肤(不需要刷新整个页面,只需替换css文件)

    1. [代码][JS]代码    <HTML><HEAD><link ID="skin" rel="stylesheet" typ ...

  7. java:类集操作,多对多的关系

    java:类集操作,多对多的关系 //一个课程有多个学生报名, //一个学生可以报名多个课程 demo.java, Student.java, Course.java' public class Co ...

  8. python函数的参数匹配

    版本:一般用python2.7.6 python3.4.3会标注 1.不可变对象(整数.字符串)通过对象引用进行传递,在函数内部不可改变. >>> def f(a): ... a=1 ...

  9. linux应用之ntpdate命令联网同步时间

    当Linux服务器的时间不对的时候,可以使用ntpdate工具来校正时间. 安装:yum install ntpdate ntpdate简单用法: # ntpdate ip # ntpdate 210 ...

  10. Tomcat_异常_01_Setting property 'source' to 'org.eclipse.jst.jee.server:AWeiXin_QiYe_Demo' did not find a matching property

    关于解决方法: 1.解决Setting property 'source' to 'org.eclipse.jst.jee.server的问题 2.eclipse中server location为灰色 ...