python函数和模块的使用方法_Python学习06_函数和模块的使用
引入
在寫(xiě)有些代碼的時(shí)候,會(huì)發(fā)現(xiàn)有些步驟重復(fù)了多次,他也不像循環(huán),都是相同的東西在重復(fù),而是指做某件事情的步驟方法,做事的人或?qū)ο蟀l(fā)生了改變,但是方法卻沒(méi)有改變。
要想寫(xiě)出高質(zhì)量的代碼,首先要解決的就是重復(fù)代碼的問(wèn)題。我們可以將某些解決問(wèn)題的步驟,封裝在一個(gè)稱(chēng)之為“函數(shù)”的功能模塊中,當(dāng)需要重復(fù)使用的時(shí)候,再調(diào)用這個(gè)“函數(shù)”就可以了。
定義函數(shù)
在Python中,使用關(guān)鍵字def來(lái)定義函數(shù),函數(shù)的名字的命名規(guī)則和變量名的命名規(guī)則是一樣的。在函數(shù)名后面的圓括號(hào)中放置傳遞給函數(shù)的參數(shù),可以理解成要對(duì)什么樣的東西產(chǎn)生影響,類(lèi)似數(shù)學(xué)上函數(shù)的自變量。在函數(shù)完成后可以通過(guò)return關(guān)鍵字返回一個(gè)值。
請(qǐng)說(shuō)出下面的方程有多少組正整數(shù)解。
實(shí)上,上面的問(wèn)題等同于將8個(gè)蘋(píng)果分成四組每組至少一個(gè)蘋(píng)果有多少種方案。想到這一點(diǎn)問(wèn)題的答案就呼之欲出了。
可以用Python的程序來(lái)計(jì)算出這個(gè)值,代碼如下所示。
"""
函數(shù)
"""
def jc(n):
ans = 1
for i in range(1, n+1):
ans *= i
return ans
m = int(input('請(qǐng)輸入m的值:'))
n = int(input('請(qǐng)輸入n的值:'))
print(jc(m) // jc(n) // jc(m-n))
函數(shù)的參數(shù)
在Python中,函數(shù)的參數(shù)可以有默認(rèn)值,也支持使用可變參數(shù)。
"""
函數(shù)參數(shù)
"""
def add(a=0,b=0,c=0):
return a+b+c;
print(add())
print(add(1))
print(add(1,2))
print(add(1,2,3))
print(add(c=50,a=100,b=200))
當(dāng)我們?cè)诓淮_定參數(shù)個(gè)數(shù)的時(shí)候,我們可以使用可變參數(shù)。
"""
函數(shù)參數(shù)
"""
def add(*args):
total = 0
for var in args:
total += var
return total
print(add())
print(add(1))
print(add(1, 2))
print(add(1, 2, 3))
print(add(1, 3, 5, 7, 9))
使用模塊管理函數(shù)
當(dāng)出現(xiàn)同一個(gè).py文件中定義了兩個(gè)同名的函數(shù),應(yīng)為不存在重載的概念,后一個(gè)定義會(huì)覆蓋之前的定義。
解決命名沖突,除了使用不同的命名外。我們也能使用模塊來(lái)進(jìn)行管理,這一點(diǎn)在多人協(xié)作開(kāi)發(fā)時(shí)很有用。在Python中,每個(gè)文件就代表了一個(gè)模塊,在使用函數(shù)的時(shí)候,我們通過(guò)impirt關(guān)鍵字導(dǎo)入執(zhí)行的模塊就可以區(qū)分到底要使用的是那個(gè)模塊中的函數(shù)。
day0604.py
def foo():
print('hello,world!')
day0605.py
def foo():
print('goodbye,world!')
day0606.py
import day0604 as m1
import day0605 as m2
m1.foo()
m2.foo()
要說(shuō)明的是,如果我們導(dǎo)入的模塊除了定義函數(shù)之外還中有可以執(zhí)行代碼,那么Python解釋器在導(dǎo)入這個(gè)模塊時(shí)就會(huì)執(zhí)行這些代碼,事實(shí)上我們可能并不希望如此,因此如果我們?cè)谀K中編寫(xiě)了執(zhí)行代碼,最好是將這些執(zhí)行代碼放入如下所示的條件中,這樣的話(huà)除非直接運(yùn)行該模塊,if條件下的這些代碼是不會(huì)執(zhí)行的,因?yàn)橹挥兄苯訄?zhí)行的模塊的名字才是"__main_"
day0607.py
def foo():
pass
def bar():
pass
# __name__是Python中一個(gè)隱含的變量它代表了模塊的名字
# 只有被Python解釋器直接執(zhí)行的模塊的名字才是__main__
if __name__ == '__main__':
print('call foo()')
foo()
print('call bar()')
bar()
練習(xí)
練習(xí)一
實(shí)現(xiàn)計(jì)算求最大公約數(shù)和最小公倍數(shù)的函數(shù)
def gcd(x, y):
if y == 0:
return x
return gcd(y, x % y)
def lcm(x, y):
return x*y//gcd(x, y)
if __name__ == '__main__':
a = int(input('輸入a:'))
b = int(input('輸入b:'))
print('%d和%d的最大公約數(shù):%d'%(a,b,gcd(a,b)))
print('%d和%d的最小公倍數(shù):%d'%(a,b,lcm(a,b)))
練習(xí)二
判斷一個(gè)數(shù)是不是回文數(shù)的函數(shù)
def reser(num):
_num=0
while num!=0:
_num=_num*10+num%10
num//=10
return _num
def isPalindrome(num):
_num=reser(num)
# print(_num)
return _num==num
if __name__ == '__main__':
x = int(input('請(qǐng)輸入x:'))
if isPalindrome(x)==True:
print('是回文數(shù)')
else:
print('不是回文數(shù)')
練習(xí)三
實(shí)現(xiàn)判斷一個(gè)數(shù)是不是素?cái)?shù)的函數(shù)
def is_prime(num):
if num<2:
return False
for i in range(2,num//2):
if num%i==0:
return False
return True
if __name__ == '__main__':
x=int(input('請(qǐng)輸入x:'))
if is_prime(x):
print('是質(zhì)數(shù)')
else:
print('不是質(zhì)數(shù)')
練習(xí)四
寫(xiě)一個(gè)程序判斷輸入的正整數(shù)是不是回文素?cái)?shù)
import day0610 as m1
import day0609 as m2
if __name__ == '__main__':
x=int(input('請(qǐng)輸入x:'))
if m1.is_prime(x) and m2.isPalindrome(x):
print('是回文質(zhì)數(shù)')
else:
print('不是回文質(zhì)數(shù)')
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的python函数和模块的使用方法_Python学习06_函数和模块的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 域名备案网址是空白(域名备案网址)
- 下一篇: python带参数装饰器 函数名_pyt