python函数&对象&模块之函数
来源:互联网 发布:淘宝有降价通知吗 编辑:程序博客网 时间:2024/06/04 17:01
为什么要使用函数
1) 可以降低代码量(调用函数只需要一行,而拷贝黏贴需要N倍代码)
2) 可以降低维护成本(函数只需修改def部分内容,而拷贝黏贴则需要每一处出现的地方都作修改)
3) 使序更容易阅读(没有人会希望看到一个程序重复一万行“I love FishC.com”)
1、创建函数
(1)不带参函数:”def 函数名():”
(2)带参函数:”def 函数名(形参1,形参2…):” ps:参数是变量
eg1:
def fun1():
print(“hello!world”)
eg2:
def fun2(num1,num2):
result=num1+num2
return result
eg3:
def MyFun((x, y), (a, b)):
return x * y - a * b
上面的写法是错误的,因为函数的参数需要的是变量,而这里你试图 用“元组”的形式来传递是不可行的。
应该写成:
def MyFun(x, y):
return x[0] * x[1] - y[0] * y[1]MyFun((3, 4), (1, 2))
注:
创建的函数,如果不调用的的话,永远不会被执行;
如果函数前面没有定义,直接调用函数名会出错。
2、函数调用&返回结果
eg1:
def fun1():
print(“hello!world”)
temp=fun1() #函数调用
hello!world #输出结果
temp
None #报错
报错的原因是函数fun1没有返回值,temp是空的。
eg2:
def fun2(num1,num2): #定义函数
result=num1+num2
return resulttemp=fun2(23,45) #调用函数
temp
68 #输出结果
temp有输出的原因是函数fun2有返回值
eg3_1:
def back():
return[‘小甲鱼’,3.14,45]
back()
[‘小甲鱼’,3.14,45] #输出结果:返回列表
eg3_2:
def back():
return(‘小甲鱼’,3.14,45)
back()
(‘小甲鱼’,3.14,45) #输出结果:返回元组
3、形参与实参
(1)形参:函数创建和定义过程中小括号里的内容 。eg:num1,num2
(2)实参:函数在调用过程中传递过去的内容。 eg:23,45
在python中可以通过查看doc来看函数的默认参数
eg:
fun2.doc
函数定义过程num1,num2是形参 #输出结果
注:
方式一:help(print) 按行输出print的用法
方式二:print.doc 连成一片输出其用法
4、关键字参数&默认参数&搜集参数
eg1:关键字参数
def saywords(name,word):
print(name+‘是’+word)
saywords(‘小甲鱼’,’teacher’) #函数调用
小甲鱼是teacher #输出结果saywords(‘teacher’,’小甲鱼’) #函数调用
teacher 是小甲鱼 #输出结果saywords(word=’teacher’,name=’小甲鱼’) #函数调用
小甲鱼是teacher #输出结果
在第三段中,直接给name和word 进行赋值,这便称作“用关键字赋值给参数”
eg2:默认参数
def saywords(name=’小甲鱼’,word=’teacher’):
print(name+‘是’+word)
saywords() #函数调用
小甲鱼是teacher #输出结果saywords(‘小布丁’) #函数调用
小布丁是teacher #输出结果saywords(‘小布丁’,’doctor’) #函数调用
小布丁是doctor #输出结果
第一段中打印为默认参数;第二段中相当于给第一个参数赋值,第二个参数使用默认参数值;第三段是一般赋值
eg3:搜集参数又称可变参数
def test(*parans):
print(‘参数的长度是:’,len(parans))
print(‘第二个参数是:’,parans[2])
test(1,[23,5,”小布丁”,’ddd’],’小甲鱼’,45,67,28,90,45)
参数的长度是:8 #输出结果
第二个参数是:’小甲鱼’
搜集参数 定义时要加’*’号,parans可以是数组跟数字、字符串的混合
eg4:参数既有搜集参数又有普通参数
方法一:非搜集参数使用默认参数(一般使用方法一)
def test(*parans,exp=8):
print(‘参数的长度是:’,len(parans),exp)
print(‘第二个参数是:’,parans[2])
test(1,[23,5,”小布丁”,’ddd’],’小甲鱼’,45,67,28,90,45)
参数的长度是:8,8 #输出结果
第二个参数是:’小甲鱼’
方法二 :非搜集参数使用关键字方法赋值
def test(*parans,exp):
print(‘参数的长度是:’,len(parans),exp=8)
print(‘第二个参数是:’,parans[2])
test(1,[23,5,”小布丁”,’ddd’],’小甲鱼’,45,67,28,90,45)
参数的长度是:8,8 #输出结果
第二个参数是:’小甲鱼’
5、局部变量和全局变量
根据变量的作用域和可见性,变量可以分为局部变量和全局变量
(1)局部变量:在函数里定义的参数,变量;
(2)全局变量:在整个代码段中,都可以被访问到;
eg1:
def discounts(price,rate): #price,rate,final_price都是局部变量
final_price=price * rate
return final_priceold_price=float(input】(“请输入原价:”)) #old_price,rate,new_price都是全局变量
rate=float(input(“输入折扣率:”))
print(“折扣后的价格是:”,new_price)============== RESTART: C:\Users\Desktop\文件\12.py ===============
请输入原价:100
输入折扣率:0.3
折扣后的价格是: 30.0
附:
如果new_price=diacounts(old_price,rate)后面一行输入print(final_price),系统会报错:没有定义。因为局部变量不能放在函数体外面调用
如果按照下面代码实现:
def discounts(price,rate): #price,rate,final_price都是局部变量
old_price=50
print(“函数体中输出old_price:”,old_price)
final_price=price * rate
return final_priceold_price=float(input】(“请输入原价:”)) #old_price,rate,new_price都是全局变量
rate=float(input(“输入折扣率:”))
new_price=discounts(old_price,rate)
print(“折扣后的价格是:”,new_price)
print(“函数外部输出old_price:”,old_price)============== RESTART: C:\Users\Desktop\文件\12.py ===============
请输入原价:100
输入折扣率:0.8
函数体中输出old_price: 50
折扣后的价格是: 80.0
函数外部输出old_price: 100.0
解析:
全局变量可以在函数内部去访问/读取它,但最好不要在函数内部去修改它,因为如果在函数内部修改全局变量的话,python会自动在函数内部新建一个同名的变量而不会影响全局变量的值。
6、global关键字
“global +变量名”:将函数内部的局部变量变成全局变量
eg1: 没加global实现结果
count=10
def f1():
count=5
print(count)
=============== RESTART: C:\Users\Desktop\文件\12.py ===============f1()
5
count
10
eg2:加了global的实现结果
count=10
def f1():
count=5
print(count)
=============== RESTART: C:\Users\Desktop\文件\12.py ===============f1()
5
count
5
7、内嵌函数/内部函数
eg1:fun2()函数的定义和调用都在fun1()函数内完成;函数体外部只能调用fun1()函数。
============== RESTART: C:\Users\Desktop\文件\12.py ===============
def fun1():
print(“函数fun1正在被调用…….”)
def fun2():
print(“函数fun2正在被调用…….”)
fun2()fun1()
函数fun1正在被调用…….
函数fun2正在被调用…….
解析:
def fun2():
print(“函数fun2正在被调用…….”)#这两行是定义fun2()函数
fun2() #调用fun2()函数
8、闭包
如果在一个内部函数里,对一个外部作用域,但不是全局变量引用,内部函数被认为是闭包。
eg1:
def funX(x):
def funY(y):
return x*y
return funY #返回的是一个函数对象,不是函数值i=funX(5)
i
- python函数&对象&模块之函数
- python查看模块,对象的函数
- Python模块学习之os常用函数
- python语法学习之函数,类,模块
- python语法学习之函数,类,模块
- python语法学习之函数,类,模块
- Python基础教程之函数与模块
- python基础知识之变量、语句、函数、模块
- python模块内置函数
- 【Python 1】函数模块
- Python: 函数模块
- Python函数+模块
- python os模块函数
- python函数、参数、模块
- Python 学习笔记二 函数、模块和对象
- Python学习笔记(三)函数、面向对象、模块发布
- python os.python模块函数
- Python之函数对象作为参数
- 树莓派USB存储设备自动挂载
- struts2 配置JSON(includeProperties)
- MVP+Retrofit+RxJava+Dagger框架
- layui文件上传跨域回调显示
- /bin/bash^M: bad interpreter: No such file or directory
- python函数&对象&模块之函数
- char,varchar,varchar2类型对空格的处理
- 【Java】【HashMap】HashMap 同步性能比较
- 4种会话追踪方式
- oracle11g 导出表报EXP-00011:table不存在。
- TCP/IP详解一 ——TCP的可靠性保证方法
- 仿select下拉框,鼠标点击元素以外隐藏下拉框
- Redux 生产实践使用注意事项
- sd/mmc/tf插拔无法挂载文件系统