《零基礎入門學習Python》(19)--函式:我的地盤聽我的
阿新 • • 發佈:2018-11-09
前言
接下來仔細講講函式與過程和區域性變數和全域性變數的作用範圍
知識點
函式與過程
-
在許多程式語言中,
函式(function)
是有返回值的,過程(procedure)
是簡單、特殊並且沒有返回值的。而在Python中,嚴格來說只有函式沒有過程。
例如:
>>> def hello(): print('hello fishc!') >>> temp = hello() hello fishc! >>> temp #沒有任何顯示,為什麼?因為我們這個hello函式沒有return任何東西。 >>> print(temp) None >>> type(temp) <class 'NoneType'> #就算函式沒有寫上return語句,python也會返回一個None物件
- 在Python中,函式是可以返回多個值的,如下:
>>> def back():
return [1,'xiaojiayu',3.14]
>>> back()
[1, 'xiaojiayu', 3.14]
>>> def back():
return 1,'xiaojiayu',3.14
>>> back()
(1, 'xiaojiayu', 3.14)
區域性變數與全域性變數
在函式裡面定義的引數以及變數都稱之為區域性變數;
在函式外邊定義的變數稱之為全域性變數。
函式內若試圖修改全域性變數,Python會新建一個同名區域性變數用於儲存修改值,原全域性變數的值不變。
def discounts(price,rate): final_price = price * rate # print('這裡試圖列印全域性變數old_price的值是:',old_price) old_price = 50 #這裡試圖修改全域性變數 print('修改後old_price的值1是:',old_price) return final_price old_price = float(input('請輸入原價:')) rate = float(input('請輸入折扣率:')) new_price = discounts(old_price,rate) print('修改後old_price的值2是:',old_price) print('打折後價格是:',new_price) #print('這裡試圖列印區域性變數final_price的值:',final_price) #請輸入原價:100 #請輸入折扣率:0.8 #打折後價格是: 80.0 #Traceback (most recent call last): # File "D:\python test\區域性變數和全域性變數.py", line 12, in <module> # print('這裡試圖列印區域性變數final_price的值:',final_price) #NameError: name 'final_price' is not defined #在函式裡面定義的引數以及變數都稱之為區域性變數, #在函式外邊定義的變數稱之為全域性變數 ==================== RESTART: D:\python test\區域性變數和全域性變數.py ==================== 請輸入原價:100 請輸入折扣率:0.8 修改後old_price的值1是: 50 修改後old_price的值2是: 100.0 打折後價格是: 80.0 ---------------------
課後習題
測試題:
- 下邊程式會輸入什麼?
def next():
print('我在next()函式裡……')
pre()
def pre():
print('我在pre()函式裡……')
next()
執行結果:
================== RESTART: C:/Users/ThinkPad/Desktop/11.py ==================
我在next()函式裡……
我在pre()函式裡……
---------------------
- 以下函式有返回值嗎?
>>> def hello():
print('Hello FishC!')
如果沒有使用return語句指定返回值,Python也不是什麼都不返回id,Ta會返回一個None物件,所以我們說Python所有的函式都有返回值。
>>> def hello():
print('Hello FishC!')
>>> temp = hello()
Hello FishC!
>>> temp
>>> print(temp)
None
- 請問Python的return語句可以返回多個不同型別的值嗎?
#可以丫,預設用逗號隔開,是以元祖的形式返回,你當然也可以用列表包含起來返回:
>>> def myFun():
return 'gogo', 520, 3.14, True
>>> myFun()
('gogo', 520, 3.14, True)
>>> def myFun2():
return ['小甲魚', 1314, 5.12, False]
>>> myFun2()
['小甲魚', 1314, 5.12, False]
>>>
---------------------
- 目測以下程式會列印什麼內容
def fun(var):
var = 1314
print(var, end='')
var = 520
fun(var)
print(var)
執行結果:
1314520
- 目測以下程式會列印什麼內容?
var = 'Hi'
def fun1():
global var
var = ' Baby '
return fun2(var)
def fun2(var):
var += 'I love you'
fun3(var)
return var
def fun3(var):
var = '小甲魚'
print(fun1())
執行結果:
================== RESTART: C:/Users/ThinkPad/Desktop/11.py ==================
Baby I love you
---------------------
動動手
編寫一個函式,判斷傳入的字串引數是否為“迴文聯”(迴文聯就是順序輸出等於逆序輸出)
##方法一:
def huiwen(string):
length = len(string)
last = length - 1
length //= 2
flag = 1
for each in range(length):
if string[each] != string[last]:
flag = 0
last -= 1
if flag == 1:
return 1
else:
return 0
string = input('請輸入一句話:')
if huiwen(string) == 1:
print('是迴文聯')
else:
print('不是迴文聯')
##方法二:
def huiwen(string):
list1 = list(string)
list2 = reversed(list1)
if list1 == list(list2):
return '是'
else:
return '不是'
print(huiwen('上海自來水來自海上'))
---------------------