定义函数:def
关键字。函数名后面的圆括号中可以放置传给函数的参数,函数执行完成后可以通过 return
关键字来返回一个值。
在python中,函数的参数可以有默认值,也支持使用可变参数,所以python中并不需要其他语言一样支持 函数的重载(因为定义一个函数的时候可以让它有多种不同的使用方式)。
from random import randint
def roll_dice(n=2):
"""摇色子"""
total = 0
for _ in range(n):
total += randint(1, 6)
return total
def add(a=0, b=0, c=0):
"""三个数相加"""
return a + b + c
# 如果没有指定参数那么使用默认值摇两颗色子
print(roll_dice())
# 摇三颗色子
print(roll_dice(3))
print(add())
print(add(1))
print(add(1, 2))
print(add(1, 2, 3))
# 传递参数时可以不按照设定的顺序进行传递
print(add(c=50, a=100, b=200))
在不确定参数个数时,可以使用可变参数
# 在参数名前面的*表示args是一个可变参数
def add(*args):
total = 0
for val in args:
total += val
return total
# 在调用add函数时可以传入0个或多个参数
print(add())
print(add(1))
print(add(1, 2))
print(add(1, 2, 3))
print(add(1, 3, 5, 7, 9))
Python中每个文件就代表了一个模块(module),在不同的模块中可以有同名的函数,在使用函数的时候我们通过 import
关键字导入指定的模块就可以区分到底要使用哪个模块的函数。
import 语句包含一下部分:
import
关键字说明:如果导入的模块除了定义函数之外还有可执行的代码,那么python解释器在导入这个模块时就会执行这些代码。
最好将这些执行代码放入如下所示的条件中,这样除非直接运行该模块,if 条件下的这些代码是不会执行的,因为只有直接执行的模块的名字才是 “__ main__”。
module.py
def foo():
pass
def bar():
pass
# __name__是Python中一个隐含的变量它代表了模块的名字
# 只有被Python解释器直接执行的模块的名字才是__main__
if __name__ == '__main__':
print('call foo()')
foo()
print('call bar()')
bar()
test.py
import module
# 导入module时 不会执行模块中if条件成立时的代码 因为模块的名字是module而不是__main__
例:实现计算求最大公约数和最小公倍数的函数
'''
实现计算求最大公约数和最小公倍数的函数
Author:AXYZdong
Date:2021-10-18
'''
def gcd(x,y):
if x > y:
x,y = y,x #找出两个数中的最小的数
for factor in range(x,0,-1): #从最小的数开始遍历,找出最大公约数
if x%factor == 0 and y%factor == 0:
return factor
def lcm(x,y):
return (x*y//gcd(x,y)) #两个自然数的积等于这两个数最大公因数,乘以它们的最小公倍数
None(首字母N必须大写)表示没有值,是 NoneType 数据类型的唯一值。
如果希望变量中存储的东西不会与一个真正的值混淆,这个没有的值就可能有用。
对于没有 return 语句的函数定义,Python 都会在末尾加上 return None 。 print() 的返回值就是 None 。
关键字参数是由函数调用时加在它们前面的关键字来识别的。关键字参数通常用于可选变元。
print() 函数有可选变元 end 和 sep ,分别指定在参数末尾打印什么,以及在参数之间打印什么来隔开它们。
print() 函数不加可选变元 end 就默认在字符串末尾添加换行符,但在设置 end 关键字参数后,就可以将它变成一个字符串。
print('Hello')
print('World')
'''
Hello
World
'''
print('Hello',end='')
print('World')
'''
HelloWorld
'''
print() 函数打印多个字符串值时,默认用空格隔开它们。但设置 sep 关键字参数,就可以替换掉默认的参数。
>>> print('a','b','c')
a b c
>>> print('a','b','c',sep=',')
a,b,c
>>> print('a','b','c',sep='|')
a|b|c
>>> print('a','b','c',sep='\\')
a\b\c
一个变量只能是其中一种,不可能既是全局的又是局部的。在不同的作用域中可以用相同的名字命名不同的变量。
Python 在查找一个变量时会按照“局部作用域”、“嵌套作用域”、“全局作用域”和”内置作用域“的顺序进行搜索。“内置作用域”就是Python内置的那些标识符,input
、print
、int
等都属于内置作用域。
名称相同的局部变量和全局变量
'''
Author:AXYZdong
Data:2021-10-21
'''
def one():
a = 'one local'
print(a)
def two():
a = 'two local'
print(a)
one()
print(a)
a = 'global'
two()
print(a)
运行结果
two local
one local
two local
global
如果要在一个函数内修改全局变量,就要使用 global 语句。
def spam():
global eggs
eggs = 'spam' #this is the global
def bacon():
eggs = 'bacon' #this is a local
def ham():
print(eggs) #this is the global
eggs = 42 #this is the global
spam()
print(eggs)
参考文献
[1]:https://github.com/jackfrued/Python-100-Days [2]:Python编程快速上手:让繁琐工作自动化/ (美)斯维加特(A1 Sweigart) 著;王海鹏译.北京:人民邮电出版社,2016.7
本次的分享就到这里