函数1

# 函数在执行过程中一旦遇到return,函数就执行完毕,并将结果返回。
# 函数在执行过程中没有遇到return时,返回值None.
def hello():
    return 'hello'
    print 'fentiao'
# 如果要定义一个什么也不做的空函数时,可以用pass语句,作为一个占位符,让代码先运行起来。
def world():
    pass
print hello()
# 函数的参数检查
# def my_abs(x):
#     if not isinstance(x,(int,float)):
#         print "请输入整形或浮点型"
#     return abs(x)
#
# print my_abs(123)

def my_abs(x):
    if type(x) !=  int or type(x) != str:
        print "请输入整形或浮点型"
    return abs(x)
print my_abs(123)
# 函数返回多个值,实质上是返回一个元组tuple,返回时元组可以省略括号,
# 函数调用接收返回值时,按照位置赋值给变量,
def func(x,y):
    if not isinstance(x,int) or not isinstance(y,int):
        print 'Error Type'
    avg = sum((x,y))/2
    maxnum = max(x,y)
    # return "平均值:[%d],\t最大值:[%d]," %(avg, maxnum)
    return (avg,maxnum)
myavg, mymax = func(2,10)
print myavg, mymax
# 默认参数,必选参数同时存在函数中存在时,一定要将必选参数放在默认参数前面;
# 设置默认参数时,把变化大的参数放前面,变化小的参数放后面,变化小的参数可以设置为默认参数。
def power(x,n=2):
    return x**n
print power(2,3)
def enroll(name, age=22, myclass="西部开源运维班"):
    print 'name:'+name
    print 'age:%d' % age
    print 'class:'+ myclass
enroll('lilei')
enroll('xiaoyao',18)
enroll('fentiao',6,'全能班')
# fun([1,2,3])  ---> [1,2,3,END]
# fun()       --->   [END]
#
# def fun():
# 默认参数必须是不可变数据类型
def fun1(li=None):
    if li is None:
        return ['END']
    li.append('END')
    return li
def fun(li = []):
    if len(li) == 0:
        return ['END']
    li.append('END')
    return li
print fun([1,2,3])
print fun()
print fun()

# 可变参数/位置参数
# 定义函数时,形参可以为*args,使函数可以接收多个参数,接收的数据类型为元组;
# 如果想将一个列表或者元组传入函数,也可通过*li 或 *t,将参数传入函数里。

def fun(*args):
    print type(args)
    return max(args),min(args)

li  = 1,42,3,14,58,6

print fun(*li)

# 关键字参数
def enroll(name, age=22, **kwargs):
    print 'name:' + name
    print 'age:%d' % age
    for k, w in kwargs.items():
        print '%s : %s' % (k, w)

dic = {'myclass':'运维班',"gender":'male'}
enroll('fentiao', **dic)
# 参数定义的顺序:必选参数 > 默认参数 > 可变参数 > 关键字参数
# *args,可变参数,args接收的是tuple.
# **kwargs,关键字参数,kwargs接收的是字典.

def enroll(name, age=22, **kwargs):
    print 'name:' + name
    print 'age:%d' % age
    for k, w in kwargs.items():
        print '%s : %s' % (k, w)

dic = {'myclass':'运维班',"gender":'male'}
enroll('fentiao', **dic)

'''
b = 2               # 全局变量,在整个代码中生效
def a():
    global  b
    b=1           # 局部变量,只在函数内生效
    print b
a()

print b

#****************************    1. 递归函数    ********************************

# # n! = 1x2x3x4x.......(n-1)xn= (n-1)!xn = (n-2)!x(n-1)xn
#
# 1!    =     1
# 2!    =     (2-1)! x 2                      =    fact(2-1) x 2
# 3!    =     (3-1)! x 3  = (2-1)! x 2 x 3    =    fact(3-1) x 3   =   fact(1)x 2 x3
def fact(n):
    if not isinstance(n,int):
        print 'input int num'
    if n == 1:
        return 1
    return fact(n-1)*n
print fact(3)
# 1. 在写递归函数时要有一个明确的结束条件;
# 2. 在递归时,问题规模要越来越小;
# 3. 递归函数效率不高,函数调用是通过栈的数据结构实现的,
#   每调用依次,栈就会多一层,最多999层,否则会出现栈溢出。

# 实现二分的效果     
# n = 10
# 返回值为:
#           5
#           2
#           1


def fun(n):
    if not isinstance(n,int):
        print 'Error Type'
    print n
    b = int(n/2)
    if b > 0:
        return fun(b)
fun(18)

#****************************    2. 函数式编程    ************************
# 面向对象编程语言:java,c++, python
# 面向过程编程语言:c
# 面向函数编程语言(lisp,erlang):
f = y(x,y)

(13+10)*2-8

面向过程:

    a = 13 + 10
    b = a * 2
    c = b -8
面向函数:
    result = jian(multipy(add(13,10),2),8)
#****************************    3. 高阶函数    ************************
# 函数可以当作参数去传递
def fun1(x,y,fun):
    return fun(1,2)
print  fun1(1,2,max)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值