Day 13:Python基本介绍06 | 函数、读写档案、引用

早安安! 今天是Python基本介绍的最後一天了~ 6天真的太短了,有好多东西想讲但都讲不完 ಥ⌣ಥ,因此我打算今天就把几个之後爬虫会用到的几个技巧介绍完,内容可能有点杂,请多见谅。

函数(Function)

函数最基础的定义就是:给定一个输入x,经过function後,得到一个输出f(x)。

大家国中学过的一元多项式,就是一个简单的函数,举例:

y = x^2+2x+1

这是一个一元二次的多项式,如果我们x代入2,y就等於2^2^+2*2+1 = 9,也可以写成函数形式f(2) = 9。

了解完函数後,其实Python的函数也差不了太多,也是一个输出得到一个输入,只是输入跟输出的型态更自由了!

Python中使用def宣告函数,後面接函数名称以及参数。

并使用函数名称(参数1, 参数2, ...)呼叫参数。

那麽,请你告诉我,底下这个算不算是一个函数呢?

def hello():
    print("Hello, World!")

hello()

执行结果:

Hello, World!

这当然也是函数罗,只不过没有输出和输入,单纯印出 "Hello World" 而已。

顺带一提,因为Python是直译式语言,是从头开始直译下来的,所以函数一定要定义在呼叫前面哦!

我们试着输入参数:

def greet(name):
    print(f"Hello, {name}!")

greet("Andy")

执行结果:

Hello, Andy!

这边我们传入字串"Andy"作为参数name,於是在函数中印出 "Hello, Andy!"。

这次写个函数,输入两个数字,回传两个数字的总和:

def sum(x, y):
    return x+y
    
print(sum(1, 2))

结果:

3

Python使用return作为函式的回传,读到return後就会跳出函数了并回传数值。所以上面例子,我们传入1和2,最後函数就回传1+2 = 3。

使用时机是将重复性高的工作写成函数,可以大大提升程序码的重用性和精简度。

读写档案(I/O)

Python读写档案使用open()这个函数,语法为open(档案名称, 模式)

file = open("demo_en.txt", "r")

档案名称没有特别写的话就是相对位置,起始位置为程序所在的资料夹,写完整路径的话就是绝对位置。

模式主要有三种,读(r)、写(w)、添加(a),以及二进位模式。

  • r:唯读模式,只能读取档案
  • w:写入模式,如果档案不存在会建立新档,如果存在则覆盖掉之前的内容。
  • a:添加模式,如果档案不存在会建立新档,如果存在则添加在之前的内容之後。
  • rb、wb、ab:加上b後就是二进位模式,通常用於读取图片。

如果档案中有中文字,则要将编码设定成utf-8,否则会出错。

file = open("demo_ch.txt", "r", encoding="utf-8")

开始档案後使用read()函数读取所有内容。

别忘了档案操作完後一定要关档哦,不关会导致更改没有存档,而且也浪费了记忆体。关档用到close()函数。

file = open("demo_en.txt", "r")

content = file.read()
print(content)

file.close()

另外,readlines()可以依照行读取整个档案,回传是一个List,每一个element就是一行字。

file = open("demo_en.txt", "r")

lines = file.readlines()
print(lines)

file.close()

执行结果:

['Country road, take me home\n', 'To the place I belong\n', 'West Virginia, mountain mamma']

我发现歌词中少了一句,所以我要用添加模式(a)+write()函数补上漏掉的那一句。

file = open("demo_en.txt", "a")

file.write("Take me home, country road\n")

file.close()

如果常常忘记关档怎麽办,Python有提供with的写法,离开范围是就会自动关档了,是不是很贴心呢! 我个人也比较建议这个写法。

with open("demo_en.txt", "r") as file:
    content = file.read()
    print(content)

引用(import)

前面有提到,Python之所以受欢迎,很大的原因是因为他拥有广大的社群,提供非常多的套件和资源可以使用,你如果够厉害也可以自己写套件回馈给社群,而我们现在就要学怎麽使用这些套件。

Python本身内建就包含很多套件了,另外Anaconda本身也预先载好了很多常用的套件,如果还是没有你要的,还是可以使用Python的套件管理工具(pip)进行安装。

只要 import+模组名称 就可以在程序码中使用了,我们这边先拿内建就有的math套件做例子,使用math套件中的log()函数取1024以2为底的log:

import math
print(math.log(1024, 2)) # 10

你可能觉得写math太麻烦,可以用 as 改成缩写。

import math as m
print(m.log(1024, 2))

或者你不想要引用整个套件,你只想要引用math套件中的log()函数而已,可以用 from 的方式写。

from math import log
print(log(1024, 2))

之後爬虫会用到很多套件,到时候再一一做介绍。

小结

今天是Python基础介绍的最後一天,我整理了几个之後专案会用到的重点,像是函数、读写档案、引用,希望能快速让你对Python有点认识。

前几天都在介绍Python多少觉得有点闷(我自己也写得很闷),不过别担心,明天我们就要开始进入文章的重头戏 - 网页爬虫!! 想学网页爬虫的朋友千万别错过明天我要和你分享的内容罗~


如果喜欢这系列文章麻烦帮我按Like加订阅,你的支持是我创作最大的动力~

本系列文章以及范例程序码都同步更新在GitHub上,後续会持续的更新,如果喜欢也麻烦帮我按个星星吧~

有任何问题或建议,都欢迎在底下留言区提出,还请大家多多指教。


<<:  Day03 如何使用别人做好的捷径

>>:  【Day 03】- 打针!打针!从 R0 注入的那件事!

Day-24 AlertDialog

AlertDialog与Toast皆可用於显示讯息, 但与Toast不同的是, AlertDialo...

Day14 - 解析看板文章及显示

该来处理搜寻结果了。 在前几天的内容中,当我完成搜寻时,都会使用parseBoardArticle方...

Day 27 Wireless Attacks - 无线攻击 (Wifite)

今天要来体验的工具是Wifite,标榜只要简单的指令,不需繁琐的步骤或额外的参数就能自动完成扫描、破...

【Day28 】 Wordpress custom field ?是什麽来的?该怎麽用?也许您需要这篇文章的帮助

试想想,你现在正在为一间酒店,制作一个网站,您需要为这间酒店加入订房的画面。当然,床数量,有没有浴缸...

区块链与物联网的两人三脚

我抠 我抠 我抠抠抠,"钱歹赚"的2022,我的每一分钱都打上9个结,为了生存时...