Python基础-函数
1.函数的定义和函数的执行流程:
"""
函数学习
"""
print('程序开始')
a = 10 # 在内存中申请内存 内存名称就是a
# 定义函数
def sayHello(): # 函数的定义: 并不会执行函数,只是在内存中做了标识
print('hello world')
print('hello world')
# 调用函数
sayHello() # 根据标识 找到函数并执行 函数执行结束 调用才结束
print('程序结束')
函数使用:
# 定义具备打印佛祖镇楼图 功能函数
def printFoZu():
print(" _ooOoo_ ")
print(" o8888888o ")
print(" 88 . 88 ")
print(" (| -_- |) ")
print(" O\\ = /O ")
print(" ____/`---'\\____ ")
print(" . ' \\| |// `. ")
print(" / \\||| : |||// \\ ")
print(" / _||||| -:- |||||- \\ ")
print(" | | \\\\\\ - /// | | ")
print(" | \\_| ''\\---/'' | | ")
print(" \\ .-\\__ `-` ___/-. / ")
print(" ___`. .' /--.--\\ `. . __ ")
print(" ."" '< `.___\\_<|>_/___.' >'"". ")
print(" | | : `- \\`.;`\\ _ /`;.`/ - ` : | | ")
print(" \\ \\ `-. \\_ __\\ /__ _/ .-` / / ")
print(" ======`-.____`-.___\\_____/___.-`____.-'====== ")
print(" `=---=' ")
print(" ")
print(" ............................................. ")
print(" 佛祖镇楼 BUG辟易 ")
print(" 佛曰: ")
print(" 写字楼里写字间,写字间里程序员; ")
print(" 程序人员写程序,又拿程序换酒钱。 ")
print(" 酒醒只在网上坐,酒醉还来网下眠; ")
print(" 酒醉酒醒日复日,网上网下年复年。 ")
print(" 但愿老死电脑间,不愿鞠躬老板前; ")
print(" 奔驰宝马贵者趣,公交自行程序员。 ")
print(" 别人笑我忒疯癫,我笑自己命太贱; ")
print(" 不见满街漂亮妹,哪个归得程序员?")
# 调用函数
printFoZu()
printFoZu()
printFoZu()
printFoZu()
printFoZu()
函数的文档注释:
def sayHello1():
'''
这是给张曼玉打招呼方法
:return:
'''
print('hello 张曼玉')
def sayHello2():
'''
这是给林青霞打招呼的方法
:return:
'''
print('hello 林青霞')
# 调用林青霞 Ctrl+Q
sayHello1()
sayHello2()
函数的参数:
"""------------------ 一个参数的函数 ------------------"""
# def sayHello(name):
# '''
# 这是给女神打招呼方法
# :param name: 传递女神姓名
# :return:
# '''
# print('hello %s'%name)
#
# # 调用函数
# sayHello('高圆圆')
"""------------------ 两个参数的函数 ------------------"""
# 定义函数,传递a和b,求a+b的和
def sum(a,b):
'''
这个函数是求两个数据的和
:param a: 第一个数据
:param b: 第二个数据
:return:
'''
result = a+b
print(result)
# 调用
sum(10,20)
函数参数练习:
"""
任意给出两个数字,可以打印最大的数字值
"""
a = 30
b = 20
# 定义函数 求两个数最大值
def myMax(m,n):
'''
求两个数最大值
:param m: 第一个数
:param n: 第二个数
:return:
'''
if m>n:
print('最大值',m)
else:
print('最大值',n)
# myMax(10,20)
myMax(a,b)
函数形参和实参:
a = 10
print('程序开始')
b = 20
def myMax(m,n):# 形参 函数定义时,并没有创建出形参 函数调用的时候才会将实参传递给形参 只要函数执行完成 形参就销毁了
if m>n:
print('最大值',m)
else:
print('最大值',n)
# myMax(10,20)
myMax(10,20) # 10 20 实参
# print(m)
print('程序结束')
print(a)
print(b)
函数形参作用域:
# 形参作用域在函数内部
# 形参会在函数执行结束之后就销毁
# 不同的函数中可以定义同名的形参
# 形参作用域:避免参数定义重名
def sayHello(name,a): # 形参
print('hello %s'%name)
def func1(name):
print(name)
# print(a)
# print(name)
sayHello('张三')# 实参
func1('李四')
# a = 10
# a = 20
函数返回值:
"""
希望前面求最大值的函数能够将最大值返回
"""
"""
任意给出两个数字,可以打印最大的数字值
"""
a = 30
b = 20
# 定义函数 求两个数最大值
def myMax(m,n):
'''
求两个数最大值
:param m: 第一个数
:param n: 第二个数
:return:返回最大值
'''
if m>n:
return m
else:
return n
# myMax(10,20)
result = myMax(a,b)
print(result)
函数类型:
"""
函数名不能重名
"""
"""------------------ 无参无返回值函数 ------------------"""
def sayHello():
print('hello')
"""------------------ 无参有返回值函数 ------------------"""
import random
def getTemp():
return random.randint(0,100)
"""------------------ 有参无返回值函数 ------------------"""
def sayHello2(name):
print('hello %s'%name)
"""------------------ 有参有返回值函数 ------------------"""
def sum(a,b):
return a+b
# print(getTemp())
sayHello2('张曼玉')
函数练习:
# 求三个数和的函数
def sum(a,b,c):
'''
求三个数的和
:param a: 第一个数
:param b: 第二个数
:param c: 第三个数
:return: 返回int数据
'''
return a+b+c
# print('hello')
# result = sum(10,20,30)
# print(result)
def func(a,b,c):
'''
求三个数平均值
:param a:
:param b:
:param c:
:return:
'''
return (a+b+c)/3
print(func(10, 20, 30))
函数的嵌套调用:
a = 10
print('程序开始')
def func1():
print('func1开始')
print('func1结束')
def func2():
print('func2开始')
func1()
print('func2结束')
# 调用func2
func2()
print('程序结束')
"""
需求1
定义一个 print_line 函数能够打印 * 组成的 一条分隔线,长度50
需求2
定义一个函数能够打印 由任意字符组成 的分隔线,长度50
需求3
定义一个函数能够打印 任意长度 的分隔线
需求4
定义一个函数能够打印 5 行 的分隔线,分隔线要求符合需求 3
"""
import random
# 定义一个 print_line 函数能够打印 * 组成的 一条分隔线,长度50
# def print_line():
# print('*'*50)
# print_line()
# 定义一个函数能够打印 由任意字符组成 的分隔线,长度50
# def print_line(str):
# '''
# 打印任意字符组成的分隔线
# :param str: 组成分割线的字符
# :return: 无返回值
# '''
# print(str*50)
# print_line('-')
# 定义一个函数能够打印 任意长度 的分隔线
def print_line(str,length):
'''
打印任意字符组成的分隔线
:param str: 组成分割线的字符
:param length: 分割线的长度
:return: 无返回值
'''
print(str*length)
# print_line('_',40)
# 定义一个函数能够打印 5 行 的分隔线,分隔线要求符合需求 3
def printFiveLine(strList):
for index in range(5):
# 随机获取字符
index = random.randint(0,len(strList)-1)
str = strList[index]
print_line(str,random.randint(20,50))
printFiveLine(['*','_','@'])
局部变量和全局变量:
# 全局变量
m = 10
n = 20
print('程序开始')
def func(a):# 形参a
# 局部变量
# 变量生命周期:调用函数并且执行到定义局部变量代码时创建 函数执行结束就会销毁
# 变量作用域:函数内部可以使用局部变量 超出函数不能使用
# 如果形参名和局部变量名一致 在局部变量定义后使用的都是局部变量
print(a)
a = 10 # 局部变量
print('hello world %d'%a)
print('m是:',m)
def func1():
b = 20
# print(a)
print('hello%d'%b)
# print(a)
func(30)
# func1()
# print('程序结束')
函数内修改全局变量:
"""
函数内部修改全局变量 需要在使用前加上global关键字
"""
# 定义全局变量
m = 10
def func():
# 将m修改成20
# 定义了局部变量m 值是30
global m
m = 30
print('函数内部m=%d'%m)
# 函数调用前打印m
print('函数调用前m:%d'%m)
func()
# 函数调用后打印m
print('函数调用后m:%d'%m)
函数多返回值:
"""
需求:
需求:定义函数接收参数a和参数b,并返回a和b的和以及a和b的差
"""
# go
def cacl(a, b):
'''
求a+b以及a-b的结果
:param a:
:param b:
:return:
'''
sum = a + b
result = a-b
return sum,result # 返回多个数据,把多个数据进行组包 变成元组返回出去
# result = cacl(10,20)
sum,result = cacl(10,20)
print(sum,result)
# open:
# success,file = open()
2.高阶函数
"""
需求:
1.定义一个求两个数和的函数
2.定义一个求两个数差的函数
3.定义一个函数既可以求和又可以求差
"""
# 1.定义一个求两个数和的函数
def sum(a, b):
'''
求两个数的和
:param a:
:param b:
:return:
'''
return a + b
# 2.定义一个求两个数差的函数
def sub(a, b):
return a - b
def div(a,b):
return a/b
m = 10
n = 20
# print(sum(m, n))
# print(sub(m,n))
# 3.定义一个函数既可以求和又可以求差
# def cacl(a,b):
# return a+b,a-b
# result1,result2 = cacl(m,n)
# print(result1,result2)
"""------------------ 高阶函数 ------------------"""
# 函数中有函数参数的函数称为高阶函数
# 数据 运算规则
def cacl(a, b, func):
'''
根据传递的计算规则 将两个数据处理完返回结果
:param a:
:param b:
:param func: 计算规则,函数类型
:return:
'''
# 调用func<=>sum
return func(a, b)
# 调用cacl 求m和n的和
# cacl(m,n,sum) # 传递函数 只需要传递函数名
# result = cacl(m, n, sum)
# print(result)
# 通过cacl求m和n的差
# result = cacl(m,n,sub)
# print(result)
# 求m和n的商
# result = cacl(m,n,div)
# print(result)
"""------------------ 返回值为函数的高阶函数 ------------------"""
def func():
return sum
result = func()
# print(result)
# 调用result
print(result(20, 30))
lambda表达式:
"""
需求:
1.定义一个求两个数和的函数
2.定义一个求两个数差的函数
3.定义一个函数既可以求和又可以求差
"""
m = 10
n = 20
def cacl(a, b, func):
'''
根据传递的计算规则 将两个数据处理完返回结果
:param a:
:param b:
:param func: 计算规则,函数类型
:return:
'''
# 调用func<=>sum
return func(a, b)
"""------------------ lambda表达式:不要通过return返回数据 ------------------"""
# 第三个参数就可以通过lambda表达式传递
# result = cacl(m,n,lambda a,b:a+b)
# print(result)
"""------------------ 通过变量保存lambda表达式 ------------------"""
# func = lambda a,b:a+b
# print(func(20, 30))
"""------------------ lambda表达式其它写法 ------------------"""
# python的lambda表达式比较简单 只适用于替换函数体只有一行代码的函数
# python的lambda表达式 :后面只能有一行代码
def myMax(a,b):
if a>b:
return a
else:
return b
# 通过lambda表达式替换myMax
func = lambda a,b:a if a>b else b
result = func(10,20)
print(result)
sort函数:
"""
l = ['abd','ewetrwef','fered','qwszfgfsaffs']
元素按照长度从小到大排序
"""
# l = ['abd','qwszfgfsaffs','ewetrwef','fered']
# 'a' 'q' 'e' 'f'
# a e f q
# 默认排序方式 依次比较字符 比较出大小即可
# l.sort()
# print(l)
# [3 12 8 5]
# [3 5 8 12]
# def func(ele):
# return len(ele)
# 元素按照长度从小到大排序
# def sort(key):
# row = 0
# while row < len(l) - 1:
# col = 0
# while col<len(l)-1-row:
# # 当前元素: l[col]
# # 下一个元素:l[col+1]
# # 如果下一个元素比当前元素小 交换
# # if l[col]>l[col+1]:
# if key(l[col])>key(l[col+1]):
# # 交换
# tmp = l[col]
# l[col]=l[col+1]
# l[col+1] = tmp
#
# col += 1
# row += 1
#
# print(l)
# 使用高阶函数
# l.sort(key=func)
# print(l)
# l.sort(key=lambda ele:len(ele))
# print(l)
l = ['abd','qwszfgfsaffs','ewetrwef','fered']
# 列表按照最后一个元素进行排序
l.sort(key=lambda ele:ele[len(ele)-1])
print(l)
map:
"""
[1, 2, 3, 4, 5, 6, 7, 8, 9]
将列表中元素变成它的平方
"""
l = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 将列表中元素变成它的平方
# index = 0
# while index < len(l):
# l[index] = l[index] ** 2
# index += 1
#
# print(l)
def func(ele):
return ele**2
# map
# map 两个参数:第一个参数:函数 第二个参数:容器
# 遍历容器每一个元素 传递给函数 处理完之后返回
# result = map(func,l)
# print(list(result))
result = map(lambda ele:ele**2,l)
print(list(result))
filter:
"""
l = ['林青霞','张曼玉','胡慧中','高圆圆','张曼玉']
false true false false true
找到列表中所有的张曼玉
"""
l = ['张三','林青霞','张曼玉','胡慧中','高圆圆','张曼玉']
def func(ele):
return ele=='张曼玉'
# 两个参数
# 第一个参数:function 参数接收元素 返回True或False
# result = filter(func,l)
# print(list(result))
# result = filter(lambda ele:ele=='张曼玉',l)
# print(list(result))
# 找到列表中所有姓张的
result = filter(lambda ele:ele[0]=='张',l)
print(list(result))