注:本实验来源于 实验楼:python3简明教程 作者: FrostSigh

索引:

项目

Value

1,定义一个函数

对函数的定义和调用

2,局部或全局变量

global 及几个例子

3,默认参数值

默认参数的机种情况(易错点)

4,关键字参数

关键字参数使用

5,强制关键字参数

强制使用规则

6,文档字符串

调用函数文档

7,高阶函数

什么是高阶函数 (map()函数

1,定义一个函数

使用关键字def来定义一个函数,语法:

def 函数名(参数):
	语句1
	语句2

例:

def sum(a, b):
	return a + b

res = sum(3, 5)
print(res)

Python3能使用pyspark吗 pymel for python3_赋值


例:根据上次写的回文检查程序,写一个函数,然后返回True 或者 false

def palindrom(s):
	return s == s[::-1]	#如果s == s[::-1]返回True,反之返回Flase

if __name__ == '__main__': #如果函数名称是main就执行。

	s = input("Enter a string: ")
	
	'''调用palindrom()函数,并传递参数s;如果返回True,执行if块;如果返回False,执行else块'''
	if palindrom(s):
		print("Yes!")
	else:
		print("No!")

Python3能使用pyspark吗 pymel for python3_Python3能使用pyspark吗_02

2,局域或全局变量

通过几个例子搞清楚全局变量和局部变量。

def change():
	a = 90
	print(a)
	
a = 9

print("Before the function call ", a)
print("Inside change function ", end=' ')
change()
print("After the function call ", a)

"""
先对a赋值9,然后打印此时的a,调用change()函数,在函数内部对a赋值90,打印此时的a
。然后函数返回到原来位置的下一个指令,打印此时的a

--当我们在函数里写a = 90时,实际上创建了一个新的名为a的局部变量,这个变量只在函数里可用,
并且会在函数完成时销毁,即使这两个变量的名字相同,但他们不是同一个变量。
"""

print("-" * 50)


a = 9

def change():
	print(a)
	
change()

"""
先对a赋值9,然后调用change()函数,打印变量a的值
--在外面的a可作为全局变量
"""

print("-" * 50)

'''
a = 9
def change():
	print(a)
	a = 100
change()

"""
出错原因:在change()函数内部重新定义了一个局部变量。在执行print(a)时,不知道此时的
局部变量a的值,所以会报错。
"""

'''

a = 9
def change():
	global a
	print(a)
	a = 100
	
print("Before the function call ", a)
print("Inside change function ", end=' ')
change()
print("After the function call ", a)

"""
先对a赋值9,然后打印此时的a,调用change()函数,打印全局变量a;然后对全局变量a进行赋值100
,打印此时的a

---此时函数体能访问全局变量,。
"""

print("-" * 50)


def change():
	global a
	a = 90
	print(a)
	
a = 9
print("Before the function call ", a)
print("Inside change function ", end = ' ')
change()
print("After the function call ", a)


"""
先对a赋值9,然后打印此时的a;调用change()函数,把a作为全局变量,对全局变量a赋值90,打印
此时的a;然后打印此时的全局变量a

----通过关键字global,来告诉a的定义是全局的,因此在函数内部更改了a的值,函数外的a的值也
实际更改了。
"""

Python3能使用pyspark吗 pymel for python3_赋值_03

3,默认参数值

函数的参数可以有默认值,就是说我们如果对指定的参数变量没有给出任何值则会赋其默认值。

例如:

Python3能使用pyspark吗 pymel for python3_赋值_04


两个非常重要的地方:

其一,具有默认值的参数后面不能再有普通参数。比如:

f(a, b=90, c)

就是错误的。

其二,默认值只被赋值一次,因此如果默认值是任何可变对象时会有所不同。例如:

def f(a, data=[]):
	data.append(a)
	return data

print(f(1))
print(f(2))
print(f(3))

如列表,字典或大多数类的实例。此函数在调用过程中会累积传给它的参数。

Python3能使用pyspark吗 pymel for python3_python3简明教程_05


可以修改为:

def f(a, data=None):
	if data is None:
		data = []
	data.append(a)
	return data

print(f(1))
print(f(2))
print(f(3))

Python3能使用pyspark吗 pymel for python3_ide_06

4,关键字参数

函数可以通过关键字参数的形式来调用,形如 keyword = value

def func(a, b=5, c=10):
	print('a is', a, 'and b is', b, 'and c is', c, end = ' ')
	
func(12, 24)
print()
func(12, b=3)
print()
func(32, c=12, b=32)
print()

Python3能使用pyspark吗 pymel for python3_ide_07


在函数调用时使用了变量名,比如f(12, c=23),我们将24赋值给c且b具有默认值。这就是关键字参数。

5,强制关键字参数

我们将函数的参数标记为只允许使用关键字参数。用户调用函数时只能对每一个参数使用相应的关键字参数。

Python3能使用pyspark吗 pymel for python3_ide_08

Python3能使用pyspark吗 pymel for python3_赋值_09

6,文档字符串

在python里我们使用文档字符串来说明如何使用代码。这对于交互模式非常有用,也能用于自动创建文档。
例:

import math

def longest_side(a, b):
	"""
	用函数来计算三角形的最长边的值:
	
	:a边:三角形的a边
	:b边:三角形的b边
	
	:return:第三条边(最长边)的长度,浮点型
	"""
	return math.sqrt(a*a + b*b)
	

if __name__ == '__main__':
	print(longest_side.__doc__)
	print(longest_side(3, 4))
	print(longest_side(7, 9))

Python3能使用pyspark吗 pymel for python3_赋值_10


通过调用函数的文档(longest.doc)对交互模式有很大作用。

7,高阶函数

高阶函数或仿函数可以接受函数作为参数的函数:

  • 使用一个或多个函数作为参数
  • 返回另一个函数作为输出
    例:
#定义一个函数
def high(st):
	'''接受一个列表参数,然后返回列表中的每一个元素的大写形式'''
	return [i.upper() for i in st]

#定义一个高阶函数
def test(f, st):
	'''接受一个函数作为第一个参数,一个列表为第二个参数;然后返回第一个参数的调用结果'''
	return f(st)

#定义一个列表
lst = ['python', 'Linux', 'Git']

#调用高阶函数test()并传递一个函数参数和一个列表
print(test(high, lst))

Python3能使用pyspark吗 pymel for python3_全局变量_11

map()函数
map是python里非常有用的高阶函数。它接受一个函数和一个序列(迭代器)作为输入,然后对序列(迭代器)的每一个值应用这个函数,返回一个序列(迭代器),其包含应用函数后的结果。
例如:

lst = [1, 2, 3, 4, 5]

def square(num):
	'''返回所给数的平方'''
	
	return num*num

#调用map()函数,并向它传递1个函数和一个列表,然后以列表形式打印
print(list(map(square, lst)))

Python3能使用pyspark吗 pymel for python3_Python3能使用pyspark吗_12