函數介紹

函數有分這幾種方法,簡單說可以把它想像是武林中各個不同門派,而各個門派中則有各自的獨門秘笈

  • 面向對象: 武當派 → 獨門秘笈: 類 → 實現方法: class
  • 面向過程: 少林派 → 獨門秘笈: 過程 → 實現方法: def
  • 函數式編程: 明教 → 獨門秘笈: 函數 → 實現方法: def

那最後面二個都是def,但有什麼區別呢?後面會在介紹

函數

數學定義

請看下圖,在國中的數學裡,是這麼定義函數(Function) …

編程語言中函數定義

函數是邏輯結構化和過程化的一種編程方法

def test(x):"""This is test function"""x += 1return x
  • def 是定義函數的關鍵字
  • test 是函數名稱
  • (): 代表裡面可以放參數,並且準備開始寫子代碼
  • """This is test function""" 是註解或是說明功能
  • x += 1 代碼區或是程序處理邏輯
  • return x 定義返回值

由於上面一開始有說 def 有二種定義,一是 過程,另一是 函數,現在就來解釋一下

#!/usr/bin/env python3
# -*- coding:utf-8 -*-# 定義一個函數
def func1():"""test1"""print('in the func1')return 0# 定義一個過程
def func2():"""test2"""print('in the func2')x = func1()
y = func2()---------------執行結果---------------in the func1
in the func2Process finished with exit code 0

上面代碼有什麼區別,應該很容易看出來吧?!沒錯,def - 函數 多了一個 return 0 ,過程跟函數都是可以被調用,過程實際上就是一個沒有返回值的函數而已,那可以想像一下, x = func1 實際上是在接收 return的值,所以打印出來的應該會是 0,而 y = func2 因為沒有下 return,所以 y的返回值應該會為空,來實驗一下吧…

#!/usr/bin/env python3
# -*- coding:utf-8 -*-# 函數
def func1():"""test1"""print('in the func1')return 0# 過程
def func2():"""test2"""print('in the func2')x = func1()
y = func2()print('from func1 return is %s' %x)
print('from func2 return is %s' %y)---------------執行結果---------------in the func1
in the func2
from func1 return is 0
from func2 return is NoneProcess finished with exit code 0

這次把返回值給打印出來,有觀察出不一樣的地方吧,為什麼 func2會顯示 None?是因為Python的解釋器隱式的打印出一個 None,也就是說,在Python中,過程也可以當做是一個函數,並且在解釋器中定義了過程的返回值為None

面向過程就是把你的功能或是邏輯包進去一個 def 過程的編程,想用調用時,就可以直接使用 函數名稱() 就可以了

知識點:

  • 不是加上return值就是函數編程

為什麼要用函數

假設我們來模擬寫log的檔案

#!/usr/bin/env python3
# -*- coding:utf-8 -*-def test1():print('in the test1')with open('a.txt', w) as f:f.write('End action')def test2():print('in the test2')with open('a.txt', w) as f:f.write('End action')def test3():print('in the test3')with open('a.txt', w) as f:f.write('End action')

那有發現什麼問題嗎?上面代碼中,三個函數裡面都有同樣的代碼,這樣寫法不是說它是錯的,也是可用的,只是如果今天有20個函數,是不是就要複製20次,這樣不僅讓代碼看起來又臭又長,可讀性上也差了,所以我們可以透過之前介紹的面向過程同樣的代碼包進一個函數,所以我們來修改一下

#!/usr/bin/env python3
# -*- coding:utf-8 -*-def logs():with open('a.txt', 'a+') as f:f.write('End action\n')def test1():print('in the test1')logs()def test2():print('in the test2')logs()def test3():print('in the test3')logs()test1()
test2()
test3()---------------執行結果---------------in the test1
in the test2
in the test3Process finished with exit code 0

然後再開啟terminal,會發現當前目錄下,會產生一個 a.txt的檔案

觀察 a.txt 的內容

End action
End action
End action

但這樣看起來log已經有寫進去了,但沒有時間,所以我們在新增一個時間戳記進去

#!/usr/bin/env python3
# -*- coding:utf-8 -*-import  timedef logs():time_fomate = '%Y-%m-%d %X'time_current = time.strftime(time_fomate)with open('a.txt', 'a+') as f:f.write('%s End action\n' % time_current)def test1():print('in the test1')logs()def test2():print('in the test2')logs()def test3():print('in the test3')logs()test1()
test2()
test3()---------------執行結果---------------in the test1
in the test2
in the test3Process finished with exit code 0

再觀察一下 a.txt 的內容

End action
End action
End action
2017-01-14 17:24:38 End action
2017-01-14 17:24:38 End action
2017-01-14 17:24:38 End action

唔!看起來已經成功了,那這樣有看出為什麼要使用函數了吧,如果還不懂,總結一下使用 函數的三大好處

函數的三大好處

  1. 代碼重複使用
  2. 保持一致性
  3. 可擴展性

參考資料:

  • 函數的定義
  • YAHOO知識-國中數學
  • 基礎數學pdf
  • 函數wiki

转载于:https://www.cnblogs.com/zarr12steven/p/6235465.html

Python 基礎 - 函數介紹相关推荐

  1. hql中常用函數介紹二

    为什么80%的码农都做不了架构师?>>>    四. ISNULL 函数和 NULLIF 函数 SQL Server里的 ISNULL 与 ASP 中的 IsNull不同,SQL S ...

  2. 從turtle海龜動畫 學習 Python - 高中彈性課程系列 3 烏龜繪圖 所需之Python基礎

    "Talk is cheap. Show me the code." ― Linus Torvalds 老子第41章 上德若谷 大白若辱 大方無隅 大器晚成 大音希聲 大象無形 道 ...

  3. Python 基礎 - 文件操作_v2

    嗯,那如何要把游標的位置給打印來? #!/usr/bin/env python3 # -*- coding:utf-8 -*-f = open('test', 'r') print(f.tell()) ...

  4. python box2d第三方库如何使用_【Python基礎】安裝python第三方庫

    pip命令行安裝(推薦) 打開cmd命令行 安裝需要的第三方庫如:pip install numpy 在安裝python的相關模塊和庫時,我們一般使用"pip install  模塊名&qu ...

  5. 從turtle海龜動畫 學習 Python - 高中彈性課程系列 9 Python 物件導向介紹

    "Talk is cheap. Show me the code." ― Linus Torvalds 老子第41章 上德若谷 大白若辱 大方無隅 大器晚成 大音希聲 大象無形 道 ...

  6. 【繁中】Python 教學 爬蟲基礎

    Python 文章目录 Python __init__.__new__和__call__ 型態 len(資料) Tuple 特殊字串 成員運算子 input 集合Set 基本語法 Set 運算子 字典 ...

  7. GeoGebra 與數學探索 1 GeoGebra 入門到進階之整體介紹

    免費的動態數學軟體 GeoGebra 入門與數學探索上的應用 賴鵬仁 國立高雄師範大學數學系 Goal: GeoGebra 除了可以輕鬆的讓我們以即時動態反饋圖形的方式模擬探索幾何的問題, 或是幫我們 ...

  8. matlab contourf(data_100);,【MATLAB】contourf 基礎用法與對數作圖

    在 MATLAB 中有著堆積如山的繪圖指令. 通常想用時就找資料,用完就會忘記,然後重複這個過程. 經過第 N 次查資料之後,夏恩終於受夠了這個重複的過程啦! 這次就來記下 contourf 用法. ...

  9. mysql數據庫的增刪改查_MySQL數據庫之基礎增刪改查操作

    作者:        守望幸福 最后修改日期:2014-7-27 所操作的MySQL數據庫名:firstdb 所用的兩個表結構如下: student表 number name socre born_d ...

  10. python中pack函数,python中struct.pack()函數和struct.unpack()函數

    python中的struct主要是用來處理C結構數據的,讀入時先轉換為Python的字符串類型,然后再轉換為Python的結構化類型,比如元組(tuple)啥的~.一般輸入的渠道來源於文件或者網絡的二 ...

最新文章

  1. ApacheServerStatus开启
  2. 雅客EXCEL (3)-合并取消单元格、平均值、添加序号
  3. Cygwin复制,粘贴 直接用鼠标在黑框上选区即可,选区结束就已经复制了。cygwin里面Ctrl+V是不能粘贴的,用Shfit+ Insert(键盘上下左右方向键的上面) Cygwin 下切换目
  4. python逻辑量有什么_Python中的逻辑运算符有什么?
  5. 企业中的局域网性能应该怎么得到保障?
  6. 7怎样设置禁网_怎样才能提升网站内页的收录?
  7. VUE报错:Module build failed: Error: Cannot find module ‘node-sass‘
  8. Linux 下 Oracle 内核参数优化
  9. 北京市昌平区卫星地图离线包下载
  10. 一个应用范德蒙行列式的例子
  11. Deepin-WPS更新字体
  12. 西南石油大学天空教室_学府之旅 | 西南石油大学
  13. Java实现 LeetCode 321 拼接最大数
  14. 关于linux校准时间
  15. 【VBS发邮件】乱码解决方法
  16. 红米9A成功root.9秒解锁BL MIUI12 root权限刷 Magisk面具 TWRP
  17. 【Labview学习】——如何实现软件的中/英文切换
  18. Maven更换远程仓库
  19. 阿玛尼干洗骗子你要骗我骗到什么时候,还我血汗钱阿玛尼骗子公司!
  20. 农民伯伯的福利到了,AR技术让种地更加easy

热门文章

  1. 二十三、Oracle学习笔记:综合案例
  2. 计算一个文件下的所有视频总时长
  3. LayaAir UI 组件 # RadioGroup 单选框按钮组
  4. 阶段3 2.Spring_03.Spring的 IOC 和 DI_9 spring的依赖注入
  5. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_07 缓冲流_1_缓冲流的原理...
  6. 已知传递函数,求幅频响应?
  7. Magento 使用心得
  8. Java面向对象㈡ -- 继承与多态
  9. jQuery源码学习之六 (jQUery中扩展方法)
  10. sqlite配置下载安装教程