许儿

函数基础

1 #函数定义

def mylen():-----------------def 是固定的,不能变,他就是定义函数的关键字。def 关键词开头,空格(必须有)+ 函数名称和圆括号(),最后还有一个":"

                              函数名:函数名只能包含字符串、下划线和数字且不能以数字开头。给函数起名字要尽量简短,并能表达函数功能。

"""计算s1的长度""" ---------------注释:每一个函数都应该对功能和参数进行相应的说明,应该写在函数下面第一行。以增强代码的可读性。
s1 = "asdfghaeknaf" 
length = 0
for i in s1:
length = length+1
print(length)

# 函数的调用 mylen()----函数名加括号,执行函数


2 函数名

     函数是第一类对象概念: a 函数名本质上就是函数的内存地址。b.函数名可以作为一个变量。

#1,可以互相赋值。

# def func1():
# print(666)
#
# f1 = func1
# f1()

#2,函数名可以当成函数的参数

def func1():
print(666)


def func2(argv):
argv()
print(777)

func2(func1)

#3,可以当成容器类数据类型的参数

# def func1():
# print(666)
#
# def func2():
# print(777)
#
# def func3():
# print(888)

#实现依次执行以上函数
# l1 = [func1, func2, func3]
# for i in l1:
# i()

#4,函数名可以当成函数的返回值
#
# def func1():
# print(666)
#
# def func2(argv):
# print(777)
# return argv
#
# ret = func2(func1)
# ret()

def func():
    print('in func')

f = func
print(f)

3 return返回值功能

(1)函数中遇到return直接结束函数;
(2)给函数调用者返回值 ------无return返回none ;有return但不写任何或者写none则返回都是none ;
return返回单个数 (return length),写什么则返回相应数据;return多个数据,则将多个数据放在一个元组里面返回。
s1 = 'asskdfjeirfjdkf'
li = [1, 2, 3, 666, 'xyn']
def my_len(b): 函数的调用#形参,形式参数,与实参进行一一对应,实参的值会传给形参
count = 0
for a in b:
count+=1
return count ---函数中不要出现print,则用return返回值,函数外再print。return将结果返回给函数的执行者
res=my_len(s1) 函数的执行 #实参,实际参数,实际要计算的参数
print(res)

形参与实参必须一一对应,数量对应,位置也对应。

从实参角度出发
位置参数: 必须一一对应,按顺序
关键字参数:必须一一对应,不按顺序 ----- a=3
混合参数:一一对应, 且关键字参数必须在位置参数后面


从形参角度出发
#位置参数:必须按顺序一一对应!
#默认参数:必须在位置参数后面
#动态参数:*args ----接收在调用时传过来的多余的所有位置参数,以元组形式输出
**kwargs-----接收在调用时传过来的多余的所有关键字参数,放在一个字典里
形参摆放顺序:a,b,*args,sex='abc',**kwargs--------位置参数,动态参数,默认参数,动态参数
关键字参数与默认参数:如果不传会有个默认值,传了会覆盖原先的值。

4 函数的聚合与打散
#函数的定义中 *聚合功能,将实参所有位置参数聚合在一个元组里面。**则将实参中关键字参数聚合在一个字典里面
def funcl(*args,**kwargs):
print(args)
print(kwargs)
l1 = [1,2,3,4]
l2 = ['xyn','abc',4]
l3 = (11,22,33)
#函数的执行中,前面加*具有打散功能。例如*l1 = 1,2,3,4
funcl(*l1,*l2,*l3)
# 运行结果
# (1, 2, 3, 4, 'xyn', 'abc', 4, 11, 22, 33)
# {}

# dic1 = {'name1':'alex'}
# dic2 = {'name2':'xyn'}
# funcl(dic1,dic2)
#运行结果
#({'name1': 'alex'}, {'name2': 'xyn'})
#{}
#funcl(**dic1,**dic2)
#运行结果
# ()
# {'name1': 'alex', 'name2': 'xyn'}


5 课堂练习:1将大的数打印出来
# def max(a,b):
# if a > b:
# return a
# else:
# return b
# print(max(100,102))-----此语句进行两部:首先max()执行函数,并将结果返回给max(),然后print值。

# def max(a,b):return a if a > b else b
# print(max(100,102))

2 统计姓名性别# def register(name,sex='男'):----不传以默认定,传的话被覆盖。
#     with open('register',encoding='utf-8',mode='a') as f1:
# f1.write('{} {}\n'.format(name,sex))
#
# while True:
# username = input('请输入姓名:/q 或者 Q 退出')
# if username.upper() == 'Q':break
# if 'a' in username:
# sex = input('请输入性别:')
# register(username,sex)
# else:
# register(username)

 

 

posted on 2018-04-22 10:20  许儿  阅读(122)  评论(0编辑  收藏  举报

导航