pyhton官方网站:函数名称和参数的文档
https://docs.python.org/3/library/functions.html#abs
交互式命令下可以通过help(),查看函数的帮助信息
调用函数时,
1.如果传入参数的数量不对,会报TypeError而且会告诉你参数数量不对
2.如果传入参数的数量正确而类型错误,也会报TypeError而且会告诉你哪个类型错误
数据类型转换:
Int(’123’) float(’12.32’) str(1.23) bool(1)
函数调用可以用动态变量指向函数 然后可以通过这个动态变量调用函数
定义函数用def 函数名括号 括号内的参数 冒号
1.在交互模式下定义函数,定义结束要按俩次回车
2.保存自定义函数文件调用时候,用fromfilename import my_function来导入函数
3.自定义函数没有return 也会自动返回None
4.如果没有自定义入口参数类型检查,自定义函数的参数类型不对就无法检查出来,数据类型的检查可以用内置函数isinstance检查
可以用pass定义空函数
def nop():
pass
import math表示导入了math包,可以用许多math相关的sin,cos,sqrt等函数
python只可以返回一个值,当需要返回多个值时,可以返回一个tuple
在python中可以用多个变量接收一个tuple,也可以用一个动态变量接收
函数参数:
def power(x,n)
调用时按位置传入两个参数,但是如果只传入一个参数就会引起错误
为了避免产生这种错误也为了方便操作,可以将n设为默认参数
def power(x,n = 2)
这样传入一个参数时,n默认为2 传入俩个参数时n会被传入参数替换
1.默认参数必须在后面
2.默认参数可以有多个
3.传默认参数可以不按顺序传 要是要加参数名
4.如果默认参数为list类型,可以通过参数名对内容进行修改,可以用None来替代list
可变参数:
在函数的参数前面加个*就变成可变参数了可变参数接收的是一个tuple类型,好处可以传入包括0个在内的任意参数
如果已有List和tuple 可以在传参时在实参前加个*
关键字参数:
可变参数允许你传入0到任意个参数,在函数调用时自动组成一个tuple
关键字参数允许你传入0到任意个含参数名的参数,这些关键字参数会在函数内自动组成一个dict
命名关键字参数:
*,参数名:就可以决定接收哪些关键字 如果没有默认值就必须传入参数否则就报错
递归参数:
函数自己调用自己注意尾递归优化 防止栈溢出 就是return不包含公式
练习:
1.
#-*- coding:utf-8 -*-
n1 = 255
print(hex(n1))
2.
def my_abs(x):
if x>= 0:
return x
else:
return -x
print(my_abs(-10))
3.为了避免空格和TAB引起错误,我们可以先打开视图显示空格和制表图
准则:同一函数的if用一个TAB, if内的内容用空格缩进一格以减少不必要的麻烦
#-*- coding:utf-8 -*-
def my_abs(x):
ifnot isinstance(x,(int,float)):
raise TypeError('bad operand type')
ifx >= 0:
return x
else:
return -x
print(my_abs(-10))
4.return 只能返回一次 不能返回两次
#-*- coding:UTF-8 -*-
import math
def quadratic(a,b,c):
x= (-b+math.sqrt(b*b-4*a*c))/2*a
y= (-b-math.sqrt(b*b-4*a*c))/2*a
returnx,y
#a = quadratic(2,3,1)
a,b = quadratic(2,3,1)
print(a)
回顾一:
1.
#-*- coding:UTF-8 -*-
def my_abs(x):
ifnot isinstance(x,(int,float)):
raise TypeError('bad operand type')
ifx>=0:
return x
else:
return -x
#print(my_abs(-12))
print(my_abs('deq'))
练习:
1.自定义函数后面一定要加:
#-*- coding:utf-8 -*-
defReg__Account(name,account,pin,age=18,city='NanJing'):
print('name:',name)
print('account:',account)
print('pin:',pin)
print('age:',age)
print('city:',city)
#a =Reg__Account('Bernie',444754938,'jiayouXIAOQIANG')
a =Reg__Account('Bernie',444754938,'jiayouXIAOQIANG',city='liyang')
2.
为什么在demo.py中执行没有显示,而在交互命令模式下中执行有显示
#-*- coding:utf-8 -*-
def add_end(L=None):
ifL is None:
L=[]
L.append('END')
returnL
add.end()
3.
#-*- coding:utf-8 -*-
#print 连续输出时 字符串和变量之间也必须有,
def person(name,age,**kw):
print('name:',name,'age:',age,'other:',kw)
#person('Bernie',23,job = 'engineer')
person('Bernie',23,gener = 'male',job ='engineer')
4.
#-*- coding:utf-8 -*-
def calc(*number):
product= 1
forx in number:
product=product*x
print(product)
calc(1)
calc(1,2)
calc(1,2,3)
calc(1,2,3,4)
5.
#-*- coding:utf-8 -*-
def fact_iter(n,product):
ifn == 1:
return product
else:
return fact_iter(n-1,n*product)
def fact(n):
returnfact_iter(n,1)
print(fact(2))
#print(fact(3))
#print(fact(100))