调用函数:

#!/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

最新文章

  1. win8win10以管理员身份运行cmd方法
  2. CentOS 5.x版本升级PHP
  3. Android下 ionic view 无法登录
  4. 【转】【SQLServer】SQL Server 2008“阻止保存要求重新创建表的更改”
  5. 反射——类(Class)
  6. 【转】MFC界面更新实现方法
  7. django 实现指定文件合并成压缩文件下载
  8. HDU 4022 Bombing (map + multiset)
  9. Nagios显示器mysql定从库: libmysqlclient.so.18: cannot open shared object file: No such
  10. [译]ASP.NET Core 2.0 会话状态
  11. Ball HDU - 4811
  12. NPM -- 初探--01
  13. Kafka配置项unclean.leader.election.enable造成consumer出现offset重置现象
  14. 用纯c语言完成16位模式下的引导程序
  15. 图解Windows 10下Visual Studio Code的下载和安装
  16. 【sql注入】简单实现二次注入
  17. 我的python渗透测试工具之主机嗅探
  18. NFS服务简介与配置
  19. 将多行按分隔符&quot;|&quot;合成一行
  20. jquery基于form-data文件上传

热门文章

  1. 条件语句,while循环语句:完整的温度转换程序
  2. VMWare 虚拟机 共享文件夹
  3. java连接sqlserver2008
  4. 背包DP入门小笔记01背包
  5. FJUT寒假作业涨姿势题解
  6. kexec 内核快速启动流程分析
  7. PHP 是什么
  8. Python3 日期和时间
  9. Dynamics 365 你所期待的子网格编辑终于来了
  10. 基于hadoop的BI架构