python入门之函数

"""
------------------------定义函数,定义过程,调用-----------------------
#1.定义函数
def func1 ():
    "test"
    print('in the func1')
    return 0

#2.定义过程
def func2():
    "test"
    print('in the func2')

#3.调用
x = func1()
y = func2()

print("from func1 return is %s" %x)
print("from func1 return is %s" %y)

"""
"""
------------------------------为什么使用函数例子-----------------------
#4.为什么使用函数:例1
    #减少重复代码
    #保持程序一致性
    #使程序变得容易扩展
import time
def logger():
    time_format = '%Y-%m-%d %X'
    time_current = time.strftime(time_format)

    with open('a.txt','a',encoding='utf-8') as f:
        f.write("%s why use the function........ \n" %time_current)

def test1():
    print("test1 starting actioon.....")
    logger()

def test2():
    print("test2 starting action......")
    logger()

def test3():
    print("test3 starting action......")
    logger()

test1()
test2()
test3()
"""
'''
---------------------------------------函数的返回值-----------------------
#5.函数的返回值
#为什么要有返回值? 因为要函数执行的结果

def test1():
    print('in the test1')#返回值0

def test2():
    print('in the test2')
    return 0  # 返回1个值

def test3():
    print('in the test3')
    return 1,'hello',['sun','weiqi'],{'name':'sun'}#返回大于1个值

x = test1()
y = test2()
z = test3()
print(x)
print(y)
print(z)

#总结:
#返回值=0 返回null
#返回值=1:返回object
#返回值>1:返回tuple
'''

"""
------------------------------------函数的参数--------------------------
#6.函数的参数
def test(x,y):#位置参数和关键字
    print(x,y)
test(y=1,x=4)#与形参顺序无关
test(1,2)#与形参一一对应
test(3,y=2)

def test2(x,y=2):#默认参数 特点:调用函数的时候默认参数非必须传递
    print(x,y)
test2(3)

def test3(*args):#参数组* 表示参数个数不固定
   print(args)
test3(1,2,34,4,{'name':'sun'})
test3(*[1,2,3,6,7])

def test4(x,*args):
    print(x)
    print(args)
test4(1,2,3,5,6,8,'sun')

def test5(name,**kwargs):#**kwargs 功能是把n个关键字参数,转换成字典的方式
    print(name)
    print(kwargs)
test5("li",age=10,set='M',sex='M')

"""

#6.局部变量和全局变量
'''
def test(name,age=18,*args,**kwargs):
    print(name,age,args,kwargs)
    logger("test")

def logger(source):
    print("from %s" %source)
test('sun',age=22,y=2,sex='M',hobby='eat')
'''

'''
school = 'mysql'#全局变量(在第一级定义的都叫全局变量)
def change_name(name):
    global school #修改全局变量
    school = 'mysql2'
    school = 'Python'
    print("before change....",name,school)
    name = 'ZHU'#局部变量,只在函数里面生效,这个函数就是这个变量的作用域

    print("after change....",name,school)
name = 'sun'
change_name(name)
print(name,school)


-------------------------
这种方法在生产上面不能用
def change_name():
    global name
    name = 'sun'
change_name()
print(name)

------------------------------

school = 'mysql'
names = ["sun","zhang","zhu"]
def change_name():
    names[0] = "sunsun"
    print(names)
change_name()
print(names)
'''

"""
#递归函数
def calc(n):
    print(n)
    if int(n/2) >0:
        return calc(int(n/2))
    print("-->",n)
calc(10)

#递归特性:必须有一个明确的结束条件
#每次进入更深一层递归时,问题规模相比上次递归应该有所减少
#递归效率不高,递归层次过多会导致栈溢出

#函数与函数式编程不同


#高阶函数
#变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数
def add(a,b,f):
    return f(a)+f(b)
res = add(3,-6,abs)
print(res)

"""
#程序练习:
#1.实现简单的shell sed替换功能
#2.修改haproxy配置文件


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值