day11函数

函数
1.def 函数名(形参列表):
语句块
2.作用:创建一个函数,把函数内的语句块打包为一个函数,用函数名绑定
3.函数调用:函数名(实参列表)
函数说明:
函数外部无法访问函数内部的局部变量:
函数内部可以访问函数外部的变量,但不能修改函数外部变量的绑定关系;
例如:x = 0
def myadd(a,b):
x = a + b
print(x)
myadd(100,200)
print(x)  >>>> 结果为0;
-----------------------------------------------------------------------------------------------------------------------------
return 语句:
语法:return [表达式]
注意:[]代表内容可省略
作用:用于函数中,结束当前的函数的执行,返回到调用该函数的地方,同时返回表达式的引用关系:
说明:
1.return语句后跟的表达式可以省略,省略后相当于return None
2.如果函数内没有return语句,则函数执行完最后一条语句之后返回None(相当于在最后加了一条returnNone语句)
----------------------------------------------------------------------------------------------------------------------------
练习:
1.写一个函数mymax,实现返回两个数的最大值:
如:
def mymax(a,b)
print(mymax(100,200))
print(mymax("ACB","ABC"))
2.写一个函数 input_number
def input_number():
此函数用来获取用户循环输入的整数,当输入负数时结束输入,将用户输入的数字以的形式返回,再用内建函数max,min,sum求出用户输入的最大值,最小值和平均值
l = input_number
print(l)
print(max(l))
print(min(x))
print(平均值)
-----------------------------------------------------------------------------------------------------------------------------
函数的参数传递:
1.传递方式:
1.位置传递:实际传递参数(以下简称"实参")与形式传参("形参")的对应关系按位置来依次对应:
def myfun(a,b,c):
    print("a=",a)
    print("b=",b)
    print("c=",c)
myfun(1,2,3)
2.序列传参:序列传参是指函数调用过程中用"*"将序列拆解后按位置进行传递的传参方式:
def myfun(a,b,c):
    print("a=",a)
    print("b=",b)
    print("c=",c)
s = "ABC"
l = [4,5,6]
t = (1.1,2.2,3.3)
myfun(*s)
3.关键字传参:关键字传参是指传参时,按着形参的"名称"给形参赋值,实参和形参按名称进行匹配:
def myfun(a,b,c):
    print("a=",a)
    print("b=",b)
    print("c=",c)
myfun(b=2,c=3,a=1)
4.字典传参:是指实参为字典,将字典用"**"拆解后进行关键字传参的传递方式:
def myfun(a,b,c):
    print("a=",a)
    print("b=",b)
    print("c=",c)
d = {'a':111,'c':333,'b':222}
myfun(**d)  #等用于a=111,b=222,c=333
说明:1.字典的键名和形参名必须一致:
2.字典的键名必须为字符串(且必须为标识符的规则)
3.字典的键名要在形参中存在
5.函数的综合传参:
函数的传参方式在能确定形参能唯一匹配到实参上午情况下可以任意结合
要求,位置传参在前,关键字传参在后
def myfun(a,b,c):
    print("a=",a)
    print("b=",b)
    print("c=",c)
myfun(1,c=3,b=2) #位置在前,关键字在后
myfun(300,*[200,300])
myfun(*"AB",300)
myfun(*[100],c=300,b=200)
myfun(*"AB",**{"c":300})
----------------------------------------------------------------------------------------------------------------------------
练习:
1.利用上题input_number 获取用户输入的数字列表,写一个函数split_number(l),传入得到的列表将所有的数字分为奇数和偶数
分别放在两个列表odds 和evens中,同时返回这两个列表打印其中的书库
def split_number(l)
l = input_number(l)
t = split_number(l)    返回一个元组,元组里放两个列表odds,evens = t
print("所有的奇数",odds)
print("所有的偶数是",evens)
---------------------------------------------------------------------------------------------------------------------------
以下讲函数的定义和创建时形参的定义:
函数的缺省参数:
语法:def 函数名(形参名1=默认实参1,形参ming2=默认实参2....)
说明:
1.缺省参数必须自右至左依次存在,如果一个参数有缺省参数,则其右侧的所有参数都必须有缺省参数
例如:def fa(a=1,b,c=3):    #是错误的
def fb(a,b=10,c)   #是错误的
2.缺省参数可以有0个或多个,甚至全部都是缺省参数:
---------------------------------------------------------------------------------------------------------------------------
练习:
写一个函数,myadd,此函数可以计算两个数的和,也可以计算三个数的和,
def myadd():

print(myadd(10,20))
print(myadd(100,200,300))
函数形参的定义方式:
位置形参:
语法:def 函数名(形参名1,形参名2,....)
语句块
星号元组形参:
语法:def 函数名(*元组形参名)
语句块
作用:收集多余的位置传参
-------------------------------------------------------------------------------------------------------------------------
练习:
写一个函数,mysum可以传入任意一个实参,返回所有实参的和
def mysum(*args)
....
print(mysum(1,2,3,4))
print(mysum(,5,6,7,8,9,10))
-------------------------------------------------------------------------------------------------------------------------
命名关键字形参:
语法:
def 函数名(*,命名关键字形参):
语句块

def 函数名(*args,命名关键字形参):
语句块
作用:强制所有的传参都必须关键字传参:
示例:
双星号字典形参:
语法: def 函数名(** 字典形参名):
语句
作用:收集多余的关键字传参
函数的参数说明:
1.位置形参,星号元组形参,命名关键字形参,双星号字典元组形参,缺省参数可以混合使用
函数参数自左至右顺序依次为:
位置形参
星号元组形参
命名关键字形参
双星号字典形参
示例:
def fn(a,b,*args,c,d,**kwargs):
pass
fn(1,2,3,4, c=100,d=200,e=300,f=400)
--------------------------------------------------------------------------------------------------------------------------------
练习:
思考题:
查看>>> help(print)
1.猜想print(函数的参数列表是如何定义的)
2.写一个myrange函数,参数可以是1-3个,实际意义同range函数规则相同,此函数返回符合range()函数规则的列表
如:L = myrange(4)
print(L) # 0,1,2,3
l = myrange()
print(L)  #  [4,5]
l = myrange(1,10,3)
print(l)  # [1,4,7] 
----------------------------------------------------------------------------------------------------------------------------------
练习:
算出100-999之间的的水仙花数(narcissistic number)水仙花数是指百位数的3次方,加上+位的3次方加上个位数的3次方等于原数的整数
例如 153 等于 1 ** 3 + 5 ** 3 + 3 ** 3
建议先写一个数is_narcissistic(n)来判断n是否为水仙花数,如果是返回True,否则返回,False在调用此数进行判断:
2.求100以内的全部素数(指数)
2,3,5,7,11...
建议用函数来做两个函数:
def is_prime(x):
''判断x是否为素数,如果是素数返回True,否则返回False
def peint_primes(n)
''此数打印小于N的全部素数:
print_primes(100)   #开始打印
3.将上次的srudent_information.py 该写为两个函数:
1.def input_student():
'''   此函数返回用户输入的学生信息列表
返回的列表格式与之前完全一致
2.def output_student(l)
'''此函数把传入的列表L打印成为表格
主程序调用:
docs = input_student()
output_student(docs)
print("请再添加几个学生信息")
docs += input_students()
print(添加之后的学生信息)
output_student(docs)






























































猜你喜欢

转载自blog.csdn.net/robin13438235412/article/details/80754036