03python_function

Python学习笔记

03python_function

  • defFunction
#-*- coding:utf-8 -*-
print("defFunction")

def my_function(x):
    if x>=0:
        return x
    else:
        return -x
x = input("please input the value of x:")
print(my_function(int(x)))
#pass用于返回没有用的空函或者方法
def my_fun01(y):
    pass

#my_function(1,2)参数检查

def my_fun02(x):
    if not isinstance(x,(int,float)):
        raise TypeError("bad operand type")
    if x!=100:
        print("not 100")
    else:
        print("hundred")

print(my_fun02("hehe"))


  • defFunctionPlus.py
#-*- coding:utf-8 -*-
print("defFunction")

def my_function(x):
    if x>=0:
        return x
    else:
        return -x
x = input("please input the value of x:")
print(my_function(int(x)))
#pass用于返回没有用的空函或者方法
def my_fun01(y):
    pass

#my_function(1,2)参数检查

def my_fun02(x):
    if not isinstance(x,(int,float)):
        raise TypeError("bad operand type")
    if x!=100:
        print("not 100")
    else:
        print("hundred")

print(my_fun02("hehe"))
  • function_abs_max
#-*- coding:utf-8 -*-
print("abs求绝对值")
print(abs(100))
print(abs(-200))
print(abs(12.43))

print(max(1,2,3,5,-100))

print(float("123.200"))
print(int("12"))
print(int(12.45))
print(str(100))

print(bool(1))
print(bool(""))

print("函数的别名")
a = abs
print(a(-123))

n1 = 123141341

print(hex(n1))

print(n1,'\n',n1)#/n好像是用于这个换行空格  所以多出一个空格
  • function_para
# -*- coding:utf-8 -*-
def power(x):
    return x*x
#这些都是必选参数

print(power(25))

#必选参数在前,默认参数在后才行
def power(x,n=2):
    i = 1
    for t in range(n):#rang是指从0-(n-1) 只是数这N个数而已
        i = i * x
    return i

print(power(5,3))

print(power(25))

print("*********************************")
def reroll(name,grade,age=6,city="xian"):
    print("name:",name)
    print("grade:",grade)
    print("age:",age)
    print("city:",city)

reroll("xiaoming",14)
reroll("xiaohong",99,8)
reroll("yangcongtou",100,9,"beijing")
reroll("lanmao",13,city="shanghai")
print("*****************坑*******************")
#默认参数最大的坑   准备好铲子了吗哈哈
def add_end(L=[]):
    L.append("END")
    print(L)

add_end([1,2,3])#[1,2,3,end]
add_end()#[end]
add_end()#[end,end]
add_end()#..

print("*******************调整*******************")
#在函数声明的时候,L=[]就已经被声明出来了,所以它变成了一个可变的list供给使用,每次再重新调用的时候就会出现这种现象,所以必须放不可变对象
def add_end_change(L = None):
    if L == None:
        L = []
    L.append("END")
    print(L)

add_end_change([1,2,3])#[1,2,3,end]
add_end_change()#[end]
add_end_change()#[end]
add_end_change()#..

#由于对象不变,多任务环境下同时读取对象不需要加锁,同时读一点问题都没有。我们在编写程序时,如果可以设计一个不变对象,那就尽量设计成不变对象。
print("*******************可变参数********************")

#实现一个累加程序,但是参数数量不确定
def add_add(numbers):
    sum = 0
    for i in numbers:
        sum = sum+i
    print(sum)
    return sum

add_add([1,23,4,5,78])
#麻烦  每次都要输入这么长的数字
def add_add(*numbers):
    sum = 0
    for i in numbers:
        sum = sum+i
    print(sum)
    return sum
add_add(1,2,3,4,567,1)
#在函数内部,参数numbers接收到的是一个tuple
add_add()

Lisa = [1,2,3,4,5,123,6,7]
hels = (1,2,4,45,4,7,88,9)

add_add(Lisa[0],Lisa[1],Lisa[2],Lisa[3],Lisa[4],Lisa[5],Lisa[6],Lisa[7])
add_add(*Lisa)
add_add(*hels)#nice
#很有用
print("********************关键字参数*********************")
#关键字参数主要是用于传递dict的,这样有键值对的值用**来传递
def person(name,age,**kv):
    print({"name":name,"age":age,"other":kv})

person("Aono",12)
person("Aono",12,city="xian")
person("Aono",12,city="xian",grade=100)
extr = {"city":"beijing","grade":123}

person("Aono",12,**extr)
person("Aono",12)
  • function_para_other
# -*- coding:utf-8 -*-
print("************************命名关键字参数*************************")

def person(name,age,**kw):
    if "city" in kw:
        print("jao")
        print("has_city")
        pass#有city参数
    if "grade" in kw:
        print("hao")
        print("has_grade")
        pass#有grade参数
    print("name:",name,"age:",age,"other:",kw)

person("Aono",24,addr="dianzizhengjie",zipcode=123456)
person("Aono",24,addr="dianzizhengjie",zipcode=123456,city="xian")

print("限制关键字参数为city和grade")
def person(name,age,*,city,grade):#*是特殊分隔符  用来区分位置参数和关键字参数的
    print(name,age,city,grade)
#命名关键字参数必须传入参数名,这和位置参数不同。如果没有传入参数名,调用将报错:
person("Aono",24,city="xian",grade=100)#事实证明不都写上而且写对是有问题的
#person("Aono",24,"xian")

#命名关键字可以有默认值,这样就会避免没有写出现的问题
def person(name,age,*,city="xian",grade):
    print(name,age,city,grade)

person("Aono",24,city="xian",grade=100)
person("Aono",24,grade=100)

print("*************************参数组合****************************")
print("*************************必选参数、默认参数、可变参数、关键字参数和命名关键字参数****************************")
print("*************************顺序:必选参数、默认参数、可变参数/命名关键字参数和关键字参数****************************")

def fun01(a,b,c = 0,*d,**e):
    print("a:",a,"b:",b,"c:",c,"d:",d,"e:",e)

fun01(1,2,[23,45],k="123",f = 12)
r = {"name":"Aono","age":23,"city":"xian","grade":122,"school":"jiliUniversity"}
def fun02(*d,**e):
    print("d:",d,"e:",e)
fun02(**r)
  • function_recursive
# -*- coding:utf-8 -*-
print("*********************递归函数*********************")
def fact(n):
    if n == 1:
        return 1
    else:
        return n*fact(n-1)

print(fact(5))
print(fact(100))
#print(fact(1000))这样会栈溢出的  要注意
print("*********************尾递归(类似于循环while)*********************")
def fact_head(n):
    return fact_tail(n,1)
def fact_tail(num,product):
    if num == 1:
        return product
    else:
        return fact_tail(num-1,num*product)
print(fact_head(5))
print(fact_head(100))#然而语言本身并没有对尾递归做了什么优化,所以还是会出现栈溢出的

print("汉诺塔")
print("设柱子A、B、C,有四个盘子,我们要想的是,第四个盘子从A-C就必须经历前三个盘子从A-B的经历,第三个盘子从A-B就必须经历前两个盘子从A-C,第二个盘子要经历从A-C就必须经历第一个盘子从A-B")
def hanuo(n,a,b,c):
    #不得不说自己脑子够笨的,简单的问题复杂化
    if n == 0:
        return None
    elif n == 1:
        print(a,"->",c)
    else:
        #print("把",n-1,"个从本地送到一个孤单的地方")
        hanuo(n-1,a,c,b)
        #print("本座",n,"移驾c")
        hanuo(1,a,b,c)
        #print("孩子们都过来",n-1)
        hanuo(n-1,b,a,c)
hanuo(9,"A","B","C")
  • thinking.txt
假设有四个:
3要做底:遍历前2
    2要做底:遍历前1
        1要做底:无需遍历
        1移动判断另外两个位置有没有大于本身的数,如果有,移动到较小的,没有,移动到100
    2移动判断另外两个位置有没有大于本身的数,如果有,移动到较小的,没有,移动到100
        1要做底:无需遍历
        1移动判断另外两个位置有没有大于本身的数,如果有,移动到较小的,没有,移动到100
3移动判断另外两个位置有没有大于本身的数,如果有,移动到较小的,没有,移动到100
    2要做底:遍历前1
        1要做底:无需遍历
        1移动判断另外两个位置有没有大于本身的数,如果有,移动到较小的,没有,移动到100
    2移动判断另外两个位置有没有大于本身的数,如果有,移动到较小的,没有,移动到100
        1要做底:无需遍历
        1移动判断另外两个位置有没有大于本身的数,如果有,移动到较小的,没有,移动到100

上边的去死!!!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值