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

调用函数:

#!/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
(0)

相关推荐

  • Python自定义函数的创建、调用和函数的参数详解

    函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段.函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自己创见函数,这被叫做用户自定义函数.一.定义一个函数你可以定义一个由自己想要功能的函数,以下是简单的规则: 1.函数代码块以def关键词开头,后接函数标识符名称和圆括号().2.任何传入参数和自变量必须放在圆括号中间.圆括号之间可以用于定义参数.3.函数的第一行语句可以选择性地使用文档字符串-用于存放函数说明.4.

  • python中实现延时回调普通函数示例代码

    前言 回调函数是我们在python编程中经常会遇到的一个问题,而想在将来某一时刻进行函数回调,可以使用call_later()函数来实现,第一个参数是回调用延时,第二个是回调的函数名称 例子如下: import asyncio def callback(n): print('callback {} invoked'.format(n)) async def main(loop): print('registering callbacks') loop.call_later(0.2, callba

  • Python入门_学会创建并调用函数的方法

    这篇文章主要介绍下如何创建并调用函数. print():是打印放入对象的函数 len():是返回对象长度的函数 input():是让用户输入对象的函数 ... 简单来说,函数就是将对象放进去,然后就可以得到处理结果.在Python中有很多自带函数,具体可以参见此链接: https://docs.python.org/3/library/functions.html Python自带的函数有限,想要解决更多的问题,我们需要学会自己创建函数. def(即define):指定义一个函数 arg(即ar

  • python中实现指定时间调用函数示例代码

    前言 本文主要给大家介绍了关于python指定时间调用函数的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 在前面的一篇文章里,可以使用延时调用,在这里采用指定时间来调用函数 例子如下: import asyncio import time def callback(n, loop): print('callback {} invoked at {}'.format(n, loop.time())) async def main(loop): now = loop.ti

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

    调用函数: #!/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&

  • Python中函数参数调用方式分析

    本文实例讲述了Python中函数参数调用方式.分享给大家供大家参考,具体如下: Python中函数的参数是很灵活的,下面分四种情况进行说明. (1) fun(arg1, arg2, ...) 这是最常见的方式,也是和其它语言类似的方式 下面是一个实例: >>> def fun(x, y): return x - y >>> fun(12, -2) 14 (2) fun(arg1, arg2=value2, ...) 这种就是所谓的带默认参数的函数,调用的时候我们可以指定

  • 实例讲解Python中的私有属性

    在Python中可以通过在属性变量名前加上双下划线定义属性为私有属性,如例子: 复制代码 代码如下: #! encoding=UTF-8   class A:     def __init__(self):                  # 定义私有属性         self.__name = "wangwu"                  # 普通属性定义         self.age = 19          a = A()   # 正常输出 print a.ag

  • 实例讲解Python中global语句下全局变量的值的修改

    Python的全局变量:int string, list, dic(map) 如果存在global就能够修改它的值.而不管这个global是否是存在于if中,也不管这个if是否能够执行到. 但是,如果没有 if bGlobal: global g_strVal; int string 将会报错.而list dic(map)是ok的. #!/usr/bin/dev python import sys import os g_nVal = 0; g_strVal = "aaaa"; g_m

  • 实例讲解Python中整数的最大值输出

    在Python中可以存储很大的值,如下面的Python示例程序: x = 10000000000000000000000000000000000000000000; x = x + 1 print (x) 输出: 10000000000000000000000000000000000000000001 在Python中,整数的值不受位数的限制,可以扩展到可用内存的限制.因此,我们永远不需要任何特殊的安排来存储大数字(想象一下在C / C ++中进行上述算术). 在Python 3中,对于所有类型

  • 实例讲解python中的序列化知识点

    在程序运行的过程中,所有的变量都是在内存中,比如,定义一个dict: d = dict(name='Bob', age=20, score=88) 可以随时修改变量,比如把name改成'Bill',但是一旦程序结束,变量所占用的内存就被操作系统全部回收.如果没有把修改后的'Bill'存储到磁盘上,下次重新运行程序,变量又被初始化为'Bob'. 我们把变量从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshal

  • 实例讲解Python中sys.argv[]的用法

    sys.argv[]说白了就是一个从程序外部获取参数的桥梁,这个"外部"很关键,所以那些试图从代码来说明它作用的解释一直没看明白.因为我们从外部取得的参数可以是多个,所以获得的是一个列表(list),也就是说sys.argv其实可以看作是一个列表,所以才能用[]提取其中的元素.其第一个元素是程序本身,随后才依次是外部给予的参数. druid.py如下 import sys a = sys.argv[0] print(a) 保存运行如下 得到的结果是test.py,这就是0指代码(即此.

  • 实例讲解python中的协程

    python协程 线程和进程的操作是由程序触发系统接口,最后的执行者是系统:协程的操作则是程序员. 协程存在的意义:对于多线程应用,CPU通过切片的方式来切换线程间的执行,线程切换时需要耗时(保存状态,下次继续).协程,则只使用一个线程,在一个线程中规定某个代码块执行顺序. 协程的适用场景:当程序中存在大量不需要CPU的操作时(IO),适用于协程: event loop是协程执行的控制点, 如果你希望执行协程, 就需要用到它们. event loop提供了如下的特性: 注册.执行.取消延时调用(

  • 实例讲解Python中SocketServer模块处理网络请求的用法

    SocketServer创建一个网络服务框架.它定义了类来处理TCP,UDP, UNIX streams 和UNIX datagrams上的同步网络请求. 一.Server Types 有五个不同的服务器类在SocketServer中. 1.BaseServer定义了API, 而且他不是用来实例化和直接使用的. 2.TCPServer用作TCP/IP的socket通讯. 3.UDPServer使用datagram sockets. 4.UnixStreamServer和UnixDatagramS

  • 实例讲解Python的函数闭包使用中应注意的问题

    昨天正当我用十成一阳指功力戳键盘.昏天暗地coding的时候,正好被人问了一个问题,差点没收好功,洪荒之力侧漏震伤桌边的人,废话不多说,先上栗子(精简版,只为说明问题): from functools import wraps from time import sleep def retry(attempts=3, wait=2): if attempts < 0 or attempts > 5: retry_times = 3 else: retry_times = attempts if

随机推荐