1、代码组织:函数(def)
封装
容器是对数据的封装
函数是对语句的封装
类是对方法和属性的封装
函数:
代码段封装成函数复用(reuse)
定义函数与调用函数
定义函数:
用def语句创建一个函数
用return关键字指定函数返回值
def <函数名> (<参数表>):
<功能代码段>
return <函数返回值>
调用函数:
<函数名>(<参数>)
无返回值:<函数名>(<参数表>)
返回值赋值:v = <函数名>(<参数表>)
变量的作用域
局部变量:
在函数内部定义的参数以及变量
只在该函数定义范围内有效,函数外边无法访问到
全局变量:
在函数外部定义,作用域是整个代码段
在函数内部使用与全局变量同名的变量时,如果未在函数内进行定义,则使用全局变量的值;
一旦在函数内部进行定义,Python会在函数内部创建一个局部变量,与全局变量就不相关了;
global关键字
global关键字可以在函数中改变全局变量的值,在函数中指明变量就是全局变量,如global num1, num2;
函数小技巧
map()函数
例如:所有数据乘以3;所有字符串转换为整数;两个列表对应值相加
map(func, list1, list2…)
函数func有几个函数,后面跟几个列表
匿名函数lambda
函数名称不重要,函数只用一次
lambda表达式返回一个匿名函数
lambda <参数表>:<表达式>
2、代码组织:函数的参数
形式参数和实际参数
形式参数:
函数创建和定义过程中,函数名后面括号里的参数
实际参数:
在调用过程中传入的参数
定义形式参数
固定参数:在参数表中写明参数名key的参数,固定了顺序和数量的固定参数;
可变参数:定义时还不知道有多少参数传入的可变参数,如print()
定义时:
def func(*args):#不带key的多个参数
def func(**kwargs): #key = val形式的多个参数
可变参数调用:
*agrs
**kwargs
调用函数的参数
可以传进两种参数
没有名字的位置参数,带key的关键字参数,指明了key,可以不按照顺序对应
如果混用,所有位置参数必须在前,关键字参数必须在后
3、上机练习:创建并调用函数
水仙花数的判定,输入n>=100的数,返回true和false;
n = int(input('请输入一个大于等于100的数:'))
str1 = str(n)
len1 = len(str1)
m = len1
s = 0
while m > 0:
s = s + int(str1[0:1]) ** len1
str1 = str1[1::]
m = len(str1)
if s == n:
print('true')
else:
print('false')
创建一个函数,接受一个参数max(max>=1000),调用编写的水仙花判断函数,求100到max之间的水仙花数,返回列表
def nflower(n):
# n = int(input('请输入一个大于等于100的数:'))
str1 = str(n)
len1 = len(str1)
m = len1
s = 0
while m > 0:
s = s + int(str1[0:1]) ** len1
str1 = str1[1::]
m = len(str1)
if s == n:
return('true')
else:
return('false')
max = int(input('请输入一个参数max(max>=1000):'))
alist = []
for i in range(100, max):
isnf = nflower(i)
if isnf == 'true':
alist.append(i)
print(alist)
请输入一个参数max(max>=1000):10000
[153, 370, 371, 407, 1634, 8208, 9474]
求字符集合的并集,创建一个函数,接受两个字符串作为参数,返回两个字符串字符集合的并集,如:接受的两个字符串为“abc”和“bcd”,返回set([‘a’, ‘b’, ‘c’, ‘d’])
def cset(str1, str2):
set1 = set(str1)
set2 = set(str2)
set3 = set1 | set2
return set3
cstr1 = input('请输入第一个字符串:')
cstr2 = input('请输入第二个字符串:')
myset = cset(cstr1, cstr2)
print(myset)