python学习笔记part8
part8:
第八章 函数
#part 8 第八章 函数
#def定义函数 ''' '''注释函数(多行注释)
#我的第一个py函数(鸡冻)
def jiafa(a,b):
'''加法hhhh'''
c=a+b
print(c)
c,d=map(int,input('pls input a&b').split())
jiafa(c,d)
#传递实参的方法
#1.位置实参 就是上面加法函数的那种类型 调用函数时传入的实参要和定义函数时形参的位置顺序对应
#2.关键字实参 调用时(形参=实参,....,形参=实参)不用在意顺序
jiafa(b=d,a=c)
#可以在定义函数时给形参制定具体值(仍可以用关键字调用/位置调用改变之前指定的值)
def jianfa(a,b=0):#不能将带默认值的形参放在不带的前面
c=a-b
print(c)
jianfa(2)#如果函数调用时只传入一个实参 则始终认为是对应第一个形参
#返回值
def returnresult(a,b,c):
d=a+b-c
return d
result=returnresult(5,4,3)
print('Result: '+str(result))
#让实参变成可选的 即整一个空默认值 对字符串来说自然是''但是对于int来说呢?
def chooseful(a,b,c=0):
d=a-c+b
return d
cresult=chooseful(2,3,1)
print(cresult)
#返回值也可以是列表、字典等
#参数也可以是列表、
def lbcanshu(list1):
list2=[]
for one in list1:
list2.append(one+'2')
return list2
listt=['hello','world','!']
answer=lbcanshu(listt)
print(answer)
#通过函数修改列表
def changelb(list1):#函数中对列表的修改时永久性的(前提是修改,sortrd()函数就不算修改)
list1.remove('hello')
list1.append('add1')
list1.insert(0,'add3')
list1.sort()
changelb(listt)
print(listt)
#如果不想让函数永久性修改原列表,而是只需要其修改后的结果作为返回值
#那么就在调用函数时 传递它的副本,这样就只修改了它的副本而保留了原件
#任意数量实参: 如果你不知道函数需要接受多少实参 ,noproblem,py允许这么做
def unknowns(*canshus): #*canshus 让py创建了一个名为canshus的元组,实际上,所有被传递来的实参都是存在元组里
sums=0
for canshu in canshus: #####不带*
sums+=canshu
return sums
print('shoule be 20',unknowns(2,4,6,8))
print('shoule be 0',unknowns())
print('should be 2 ',unknowns(2))
#位置实参+任意数量实参
# 如果函数形参 既有 *未知数量的参数 和 某确定参数,其他形参必须在*形参前面
# Python 先匹配位置实参和关键字实参,再将余下的实参都收集到最后一个形参中
def both(name,*datas):
print('his name is',name,'and his grades are',datas)
both('Lisa',98,80,83,100)
#任意数量的关键字实参
def keywords(**zidian):
print(zidian)
keywords(
key1='values1',
key2='values2',
key3=3,)
#写成这个形式 函数就自动存入字典了 输出:{'key1': 'values1', 'key2': 'values2', 'key3': 3}
#将函数存储在模块中
def kuamokuai(*das):
ret=0
for da in das:
ret+=da
return ret
8.6函数放在模块中
#part8 配套使用 8.6将函数存储在模块中
import part8
print(part8.kuamokuai(2,3,4))
#way 2
from part8 import kuamokuai,unknowns
print(unknowns(1,2,3))
#如果要导入的函数名与本程序函数名或其他要导入的函数名冲突 或者函数名太长
#可以用as给函数指定别名
from part8 import unknowns as un
print(un(1,2))
也可以给模块(引入函数来自的.py文件)指定名称
import part8 as p8
p8.kuamokuai(2,3)
#倒入模块中的所有函数
from part8 import*