博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python 基礎 - 函數介紹
阅读量:5172 次
发布时间:2019-06-13

本文共 3323 字,大约阅读时间需要 11 分钟。

函數介紹

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

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

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

函數

數學定義

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

1070619-20161230013050820-228429269.png

編程語言中函數定義

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

def test(x):    """This is test function"""    x += 1    return 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 func1in 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 func1in the func2from func1 return is 0from 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 test1in the test2in the test3Process finished with exit code 0

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

觀察 a.txt 的內容

End actionEnd actionEnd 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 test1in the test2in the test3Process finished with exit code 0

再觀察一下 a.txt 的內容

End actionEnd actionEnd action2017-01-14 17:24:38 End action2017-01-14 17:24:38 End action2017-01-14 17:24:38 End action

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

函數的三大好處

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

參考資料:

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

你可能感兴趣的文章
C# 3.0 LINQ的准备工作
查看>>
静态代码审查工具FxCop插件开发(c#)
查看>>
创建代码仓库
查看>>
理解裸机部署过程ironic
查看>>
Django 组件-ModelForm
查看>>
zabbix 二 zabbix agent 客户端
查看>>
大数据分析中,有哪些常见的大数据分析模型?
查看>>
如何防止Arp攻击
查看>>
ClassList 标签的用法
查看>>
小细节:Java中split()中的特殊分隔符 小数点
查看>>
【编程思想】【设计模式】【行为模式Behavioral】中介者模式Mediator
查看>>
后端接口时间戳或者随机数的作用
查看>>
tomcat docBase 和 path
查看>>
java默认语法、EL、JSTL表达式,JSTL和struts Tag标签的使用总结
查看>>
Vue笔记:使用 axios 发送请求
查看>>
富文本编辑器 - RichEditor
查看>>
java webcontroller访问时报415错误
查看>>
qcow2、raw、vmdk等镜像格式
查看>>
Jzoj5455【NOIP2017提高A组冲刺11.6】拆网线
查看>>
特定字符序列的判断(1028)
查看>>