python 函数的理解和定义

############################## 函数的定义 ################################

#print("hello world")
#min(2,3)


li = [1,2,3]
li.copy()         ----->即函数

#目前学习需要缩进的:
#    if,elif,else,for,while,def

#如何定义函数
"""
def print(self, *args, sep=' ', end='\n', file=None):
    pass


def min(*args, key=None): # known special case of min
    pass

总结:
def 函数名():
    函数体
"""
#定义函数,并不会值型函数体里面的内容
del hellp():
    print("hello")
    print("python")

#调用函数的过程
hello()

#函数里嵌套函数

def villa():
    print("is villa")
    def messi():
        print("is messi")

    
#建议在代码里面定义一个主函数
def main():

#name:定义函数时的变量,叫做形参,形参可以任意起名字
def welcom(name1):    #name1 = "villa"
    print("hello" + name1)

#"villa",真实的数据信息,调用函数时传的参数成为实参;
name2 = "messi"        #name2为实参
welcome("villa")

def collatz(number):
    print(number // 2 if number % 2 == 0 else 3 * number + 1)

################################## 函数动态添加成员 ########################

def fun():
    print(fun.x)
fun()

#动态添加
fun.x = 3
fun()

#动态删除
del fun.x
fun()

####################### 函数形参之位置参数 #############################

#参数:形参,实参
#形参的分类:位置参数,默认参数,可变参数,关键字参数


#位置参数:形参和实参位置必须保持一致
def getInfo(name,age):        ##按照位置传参数
    print(name,age)

getInfo("name",12)
getInfo(age = 18,name = "villa")

#默认参数,形参实参可以不一致
def mypow(x,y=2):
    """
    求x的y次方,y默认值为2

    """
    print(x**y)
mypow(4)
mypow(4,3)

#可变参数
def mySum(*args):
    """
    需求:用户可以传递任意个数值,计算数值的和
    注意:*args是可变参数;(args可以接收任意值)
          args是元组数据类型
          args可以改成其他,因为是形参
    sum = 0
    for item in args:    
        sum +=item    
    """
    print(sum)

mySum(1,2,3,4)

#关键字参数
hobbies,gender
def getStuInfo(name,age,**kwargs):
    """
    **kwargs(关键字)是一个字典,可以传递任意多的key-value对

    """
    print(name,age)
    print(kwargs)

getStuInfo("villa",35,hobbies = ["soccer","running"],gender = "female")


# 参数解包:*变量名,**变量名

score = (12,23,24,67,78,54)
print(minScore,*middleScore,maxScore)
print(minScore,middleScore,maxScore)

#对list tuple set解包时,只需要在变量前加*;
nums = [1,3,4,5,32,54]
nums1 = (1,23,1243,231,32)
nums2 = {1,2324,432,343,1}

mySum(*nums2)


#如果要对字典解包,一个星号,获取所有的key值;
d = dict(a=1,b=2)
print(*d)


print(**d)
getStuInfo("wetos",12,**d)

############################## 函数返回值 ######################

res1 = print("hello")
print("返回值:",res1)

返回值:none

res2 = min


#返回值:函数运算的结果,还需要进一步操作时,给一个返回值;
#return用来返回函数执行结果的,如果没有返回,默认为None(null,none)
#python可以间接返回多个值;原理:返回一个元组,将来对元组进行解包
#一旦遇到return,函数函数执行结束,后面的代码不会结束,(yield)
#默认参数,形参实参可以不一致
def mypow(x,y=2):
    """
    求x的y次方,y默认值为2

    """
    return x**y,x+y

mypow(4)
a = mypow(4,3)
print(a)


a = mypow(2,2)
print
print(type(a))
<class 'tuple'>

################################ 变量的作用域 ##########################

#局部变量:在函数内部定义的普通变量,只在函数内部起作用,函数执行结束,变量会自动删除。
    - 可变数据类型:函数内部会影响外部变量的值
    -不可变数据类型:函数内部不会影响外部变量的值

a = 1
print("outside",id(a))
def fun():
    a = 5
    print("inside",id(a))
fun()
print(a)

a = [1,2,3,4]
print("outside",id(a))
def fun():
    a.append(5)
    print("inside",id(a))
fun()
print(a)


#全局变量:
    global            


a = 1
print("outside",id(a))
def fun():
    global a    #声明a为全局变量
    a = 5
    print("inside",id(a))
fun()
print(a)
print(id(a))

#################################### 函数补充 ########################

def add(x:int,y:int) -> int:
    #参数数据类型的判断
    if isinstance(x,int) and isinstance(y,int):
        return x + y
    else:
        return 'error'
    return x + y
print(add(1.0,2.3))


#参数检测:
isinstance(1, int)
Out[4]: True
isinstance(1.0, int)
Out[5]: False
isinstance(1, (int, float))
Out[6]: True
isinstance(True, (int, float))
Out[7]: True
isinstance([1,2,3], (int, float))
Out[8]: False

#cmp函数在python2和python3的区别
>>>cmp(1,2)
-1
>>>cmp(1,1)
0
>>>cmp(2,1)
1

#函数名可以变为变量名
>>> sum = 0
>>> sum([1,2,3,4,5])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable
>>> sum
0
>>> abs
<built-in function abs>
>>> abs(-10)
10
>>> a = abs
>>> a(-100)
100

#空函数
pass


#默认参数在指定时,必须是不可变数据类型,

eg:
def fun(li[])
    li.append('End')
    return li
解决:
def fun(None)
    li = []
    li.append('End')
    return li

######################### 列表生成式 ##########################

#1.接收变量k,a,b
s = '51 5000 10000'
#['51','5000','10000']
#存储整形的k,a,b
#li = []
#for item in s.split():
    li.append(int(item))
k,a,b = li

#k,a,b = [int{item} for item in s.split()]
#print(k,a,b)


需求2:生成一个列表,列表元素分别为[1**1,2**2,3**3....]
#li =[]
#for i in range(1,8):
#    li.append(i**i)
#print(li)

print([i**i for i in range(1,8)])


总结:
    [experssion(或函数) for item1 in 序列 if 判断语句
               for item1 in 序列 if 判断语句
               for item1 in 序列 if 判断语句
    ]
        

print([i**i for i in range(1,8) if i%2 == 0])


需求:将3*3d的矩阵转换为一维数组
3*3矩阵:[
        [1,2,3],
        [4,5,6],
        [7,8,9]
    ]

一维数组:[1,2,3,4,5,6,7,8,9]

li=    [
        [1,2,3],
        [4,5,6],
        [7,8,9]
    ]

resLi = []
for item in li:
    for item2 in item1:
        resLi.append(item2)
print(resLi)    

print([item2 for item1 in li for item2 in item1])

猜你喜欢

转载自blog.csdn.net/zcx1203/article/details/81703484