07函数

# -*- coding: utf-8 -*-
#===============================================================================
#第七章 函数

'''
目录
7.1 懒惰是重用的基石
7.2 函数基础
7.2.1 创建函数
7.2.2 为函数添加文档注释
7.2.3 没有返回值的函数
7.3 函数参数
7.3.1 改变参数的值
7.3.2 关键字参数与默认值
7.3.3 可变参数
7.3.4 将序列作为函数的参数
7.4 作用域
7.5 递归
'''


# 7.1懒惰是重用的基石

#===============================================================================
# 避免一段程序多次使用,并且维护不方便,可以利用函数达到目标
#===============================================================================


#7.2函数基础

#===============================================================================
# 7.2.1创建函数
# 需要函数名,参数,返回值,其中函数名是必须的,参数和返回值可以为空
# 有多个参数时,要使用逗号隔开,有返回值时,函数结尾return后面的值就是返回值
# 定义函数要使用def,如:def greet():
#===============================================================================
'''
#测试
def greet(name):
if name=="A":
age='a'
else:
age='没有名字'
return age
print(greet('A'))
'''

#===============================================================================
# 7.2.2为函数添加文档注释
# 可以为函数添加文档注释,可以使用help函数获取:help(函数)
#只会打印函数下方代码前的注释
#===============================================================================
'''
#测试
def greet(name):
"查看列表中是否有传入name的存在:"
if name=="A":
age='a'
print(age)
else:
age='没有名字'
"返回名字"
return age
print(help(greet))
'''

#===============================================================================
# 7.2.3没有返回值的函数
# 可以在函数中输出需要的结果,就可以不用返回值,
# 不要返回值时,直接不写return。或者return后面空白,这种用于从函数的任意地方使用return直接跳出函数
#===============================================================================


#7.3函数参数

#===============================================================================
# 7.3.1改变参数的值
# 值传递(复制参数):参数的变量类型是数值、字符串、布尔值等。函数内更改不会影响外部变量
# 引用传递(引用参数,复制的是内存空间的首地址):参数的变量类型是序列、对象这样的复合类型。函数内更改会影响外部变量
#===============================================================================
'''
#测试
x=20;
y='你好'
def dan(x,y):
x=40
y='呵呵'
dan(x,y)
print(x,y)
n={'a':20,'b':30}
m=['a','b','c']
def duo(n,m):
n['a']=100
m[1]='asdasfzfa'
duo(n,m)
print(n,m)
'''

#===============================================================================
# 7.3.2关键字参数与默认值
# 调用函数时也可以用关键字参数,如:def a(b='aaa'):。。。这样在函数引用的参数就会被固定
# 使用混合参数时,关键字参数必须放后面,如:def a(c,b='aaa'):。。。否则会报错
# 当传入的参数与关键字参数名字相同时,会使用传入的参数
#===============================================================================

#===============================================================================
# 7.3.3可变参数
# 可以任意传递多个参数的形式成为可变参数,如print()。类型可以是任意类型
# 定义时需要在参数前面加个星号,如def a(*b):
# 可变参数在函数内部是以元组的形式出现,在函数内可以像元组一样使用可变参数中的具体参数值
# 可变参数一般放在后面,如果放在前面,那么它后面只能是关键字参数或者设置默认值
#===============================================================================

#===============================================================================
# 7.3.4将序列作为函数的参数值
# 列表中的元素作为单个参数值传给函数时,需要在列表前面加个星号
# 元组、列表、字典都可以拆分后传入函数,不过字典要使用两个星号
#===============================================================================


#7.4作用域

#===============================================================================
# 指变量、函数、类等Python语言元素是否可见的范围
# 在Python文件的顶层定义的变量、函数都属于全局作用域
# 在函数中定义的变量属于函数本身的局部作用域
# 在局部作用域可以访问上一层作用域的变量,但是前提是不在本局部作用域定义同名的变量,否则会自动隐藏局部作用域外的同名变量
#===============================================================================


#7.5递归

#===============================================================================
# 函数内部调用自己这个函数,就叫递归
# Python解析器会利用栈(stack)处理递归函数返回的数据
# 递归函数必须有终止条件,否则栈会溢出
#===============================================================================


'''
#练习题
#1.编写sortNumbers函数,有两个参数,一个numbers可变参数,普通参数type,默认值时asc
# 功能是按升序或降序排列可变参数的numbers中的参数值,并以列表形式返回排序结果,type是为asc指升,其他值为降
numbers=[2,4,1,5,3,6,9,8,252,54,364,785,24]
inputs=input("请输入升或者降:")
types='a'
if inputs=='升':
types='asc'
def sortNumbers(numbers,types):
if types=='asc':
numbers.sort()
else:
numbers.sort(reverse=True)
sortNumbers(numbers,types)
print(numbers)


#2.编写递归来实现二分查找,如果在有序列表中查到了指定值,返回该值在列表中的索引。否则返回-1
def search(sequence, number, lower = 0, upper = None):
if upper is None: upper = len(sequence) - 1
if lower == upper:
if number == sequence[upper]:
return upper
else:
return -1
else:
middle = (lower + upper) // 2
if number > sequence[middle]:
return search(sequence, number, middle + 1,upper)
else:
return search(sequence, number,lower, middle)
numbers=[2,4,1,5,3,6,9,8,252,54,364,785,24]
numbers.sort()
n=int(input("请输入要查找的整数:"))
print(search(numbers, n))
'''

猜你喜欢

转载自www.cnblogs.com/zengsen666/p/12093409.html