从零开始的Python教程 -- 函数和模组

从零开始的Python教程 – 函数和模组

函数

Code Reuse

代码复用

正式开始解释函数之前先说一下代码复用这个概念,简单来说就是一段重复的代码段,我们不需要每次都写,每次写重复了好几行的代码。

Functions

函数
还记得之前我们用过的那些函数嘛,比如len、max

其实函数是可以自己定义的

函数定义的模板:

def 函数名(参数列表):
	代码
	代码
	代码
	......
	return 返回值
  • def是关键字
  • 函数名可以自己写
  • 参数列表可以为空
  • return 是关键字 ,返回值可以为空(此时return可以不写),return表示到这里以后,函数就结束了。后面不应该再有函数的内容,

这里看一个例子

def my_func():
   word = "spam"
   print(word)
   print(word)
   print(word)

my_func()
"""
spam
spam
spam
"""
# 假设我们要输出spam三次,之前的写法是写三个print,
# 如果下次我们又要进行一样的操作,就要再写三个print,
# 但是如果写成函数,只用写一行my_func就等于原来的三行print了

要注意函数的定义必须写在调用之前
再看一个例子

hello()

def hello():
    print("Hello world!")
 
 # NameError: name 'hello' is not defined

此处的 hello()就是函数的调用,def hello()是定义,可以看到,定义写在调用之后,所以会报错。
因为python是顺序执行下来的,从上往下,没有定义,当然就不认识了。

Function Arguments

函数参数
到目前为止,我们看过的所有函数定义都是空参数的函数。
参数 要用括号括起来。

但是,大多数函数都带有参数。

下面的示例定义了一个带有一个参数的函数:

def func(word):
	print(word)
	print(word)
	print(word)
func("apple")
# apple
# apple
# apple
# 可以看到,通过传参,我们可以把任意的 word 传到 func 里,达到重复输出三次的效果

再看一个,和上面的类似

def print_with_exclamation(word):
   print(word + "!")

s = ["spam", "eggs", "python"]
for i in s:
	print_with_exclamation(i)

"""
spam!
eggs!
python!
"""

函数的目的是:给传进去的字符串的最后加上 ! 并且输出。
可以看到:

第一次:
"spam"被传到函数里,第一次变量word的值是"spam"
第二次:
"eggs"被传到函数里,第二次变量word的值是"eggs"
第三次:
"python"被传到函数里,第三次变量word的值是"python"
每次都给word加上!,并且输出

这里可能读者还是不能很好的理解,所以我再举一个例子
可能有点麻烦,但是理解不难。

这个函数的作用是:求 list 里最大的数

def max(l):
	max_value = l[0]
	for i in l :
		if i > max_value:
			max_value = i
	return max_value

a = [1,2,3,4,5,6,7,8,9]
b = max(a)
print(b)
# 9
这里我定义了一个max函数,传进去的参数是一个list类型的数据
把list里的每个元素都比较一遍,记录下最大的值,最后返回一个max_value给b
输出b的值

函数中变量的作用域
函数参数可以用作函数定义中的变量。 但是,不能在函数定义之外使用它们。
就是每个变量都有自己的小圈子(范围),超过范围就不认识他们,最大的圈子就是全局变量,也就是顶格写的那些。

def function(v):
   v += 1
   print(v)

function(7)
print(v)
"""
8
NameError: name 'v' is not defined
"""

可以看到在函数之外使用变量v会报错:v没有定义

Functions as Objects

函数作为对象
对象这个概念可能读者还不能理解,这里简单当作一种数据就行

  • 尽管函数的创建方式与常规变量不同,但是函数就像其他任何类型的值一样。

可以将它们重新分配给变量,然后再由这些变量名引用。

通俗的说,我们可以把函数也当作一个变量
举个例子

def multiply(x, y):
   return x * y

a = 4
b = 7
operation = multiply
print(operation(a, b))
# 28

可以看到,变量不仅可以表示数值,也可以表示函数。

  • 函数也可以用作其他函数的参数。
def add(x, y):
  return x + y

def do_twice(func, x, y):
  return func(func(x, y), func(x, y))

a = 5
b = 10

print(do_twice(add, a, b))
# 30
# 这里的过程是这样的:
# add(add(5,10),add(5,10)) -> add(15,15) -> 30

# 比如这里我用了 相加 这个函数,那我也可以定义一个相减的函数
# 同样的可以作为do_twice的参数

Module

模块
或者叫做包、库
这句话是错的,
模块是一个 py后缀的文件,就是一个带有__init__.py模块的文件夹,主要功能是用于区分同名的模块。
一个模块里面就可以有很多函数,好比是瑞士军刀,功能很齐全,也很专一。可以当作是函数的集合

使用模块的基本方法是在代码顶部(一般是最开始的几行)添加import module_name,然后使用module_name.var访问模块中名称为var的函数或值。

举个例子:
使用随机模块生成随机数:

import random # 引入random的模块

for i in range(5):
   value = random.randint(1, 6) # 调用random里的randint函数
   print(value)
# randint(1, 6)是随机1-6的随机整数
"""
2
3
6
5
4
"""

如果只需要模块中的某些功能,则可以使用另一种导入方式。
它们采用from module_name import var的形式,然后可以像在代码中正常定义的那样使用var

对应上文的:

from random import randint

又例如,仅从math模块导入pi常数:

from math import pi
print(pi)
# 3.141592653589793
import math
print(math.pi)
# 3.141592653589793

以上两种是一样的

引入多个 var

from math import pi, sqrt
# sqrt是开根函数

如果是要全部引入的话

from math import *

‘ * ’表示全部

  • 尝试导入不可用的模块会导致ImportError。
import some_module

# ImportError: No module named 'some_module'
  • 你可以使用as关键字以其他名称导入模块或对象。 一般在模块或对象的名称较长或容易混淆时使用。

好比是重新命名了,看个例子:

from math import sqrt as sq

print(sq(4))
# 2

The Standard Library & pip

标准库和pip

Python中有三种主要类型的库,
它们是:
你自己编写的,
从外部资源安装的库
以及预装在Python的库。

pip在之前安装的时候我就有提到过。

  • 标准库就是python里自带的一些库,不需要额外安装,就是预装在python的库
  • 如果你需要更多炫酷的功能,就需要通过pip安装,也就是外部资源

这些非常有用的标准库有:

string, re, datetime, math, random,
os, multiprocessing, subprocess, socket, email
......

对应就是:字符串、正则表达式、时间日期、数学、随机、操作系统、多线程、子进程、套接字、电子邮件等
因为标准库中的模块 太多了。 如果读者有需求可以自行查阅官方文档

pip

pip 是命令行里的一个工具,可以管理你的各种包
比如下载、更新、删除。

pip常用命令:

SomePackage是包的名字

pip install SomePackage				# 默认安装最新版本
pip install SomePackage==1.7		# 指定安装版本
pip install --upgrade SomePackage	# 升级
pip search SomePackage				# 搜索
pip uninstall SomePackage			# 卸载
pip list							# 查看已经安装的包
pip list -o							# 查看可以升级的包
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值