python03——函数基础

1.1函数基础

函数定义:

def 函数名():

     代码块

函数的调用:

函数名()

def print_info():
      print("hello")
      pass

print_info()

1.2函数参数

def 函数名(参数列表):

def print_info(name,age,hight)
     print('%s年龄是%d岁'%(name,age))
     print('%s体重是%dkg'%(name,hight))

print_info(yangh,12,33)

参数分类:

必选参数(也叫位置参数)——调用时,必须给实参

def sum(a, b):   #形式参数:不占内存地址
    sum = a + b
    print(sum)
    
sum(20,15)   #实际参数:占用内存地址的
sum()   ##不能这么写,因为没有给a、b传值

默认参数(默认参数,必须放在参数列表的最后)

def sum(a=10,b=20)
     print(a+b)

sum()   #可以不赋值,会使用默认值
sum(1)
sum(1,2)      
def sum(b,a=2):
def sum(a=2,b):  ###错

可变参数(当参数个数不确定时使用,比较灵活) *

def getComputer(*args):
    result=0
    for item in args:
          result+=item
    print(result)
    pass

getComputer(1)
getComputer(1,2,3)

关键字参数(可变的) ** 字典类型,key值必须是字符串

def keyFunc(**kwargs):
     print(kwargs)

dicta={''name":'yh',"age":18}
keyFunc(**dicta)

keyFunc(name='lh',age=26)

组合使用:(可选参数得放在关键字参数之前)

def complexF(*args,**kwargs):   ##(**kwarg,*args)会报错
    print(args) 
    print(kwargs) 

complexF() #不会报错 
complexF(1,2,3,4,name='lh') #会自动识别自动填充

1.3.函数返回值

return后的代码不会被执行

def sum(a,b):
    sum=a+b
    return sum
print(sum(10,20)) ##会返回到调用的地方
def calc(num):
      r=0
      i=1
     while i<=num:
            r+=i
            i+=1
    return r

v=calc(10)
print(v)
li=[]
return li  ###返回列表
return 1,2,3  ##返回元组
return {"name":"yh"}  ##返回字典

1.4.函数的嵌套调用

在函数里调用其他函数

def fun1():
    print("start1")
    print("……………………")
    print("end1")
    pass
def fun2():
    print("start2")
    fun1()
    print("end2")
    pass
fun2()

巩固:

1.写函数,接收n个数字,求这些参数数字的和
2.写函数,找出传入的列表或元组的奇数位对应的元素,井返回-个新的列表
3.写函数,检查传入字典的每一个value的长度如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。PS 字典中的value只能是字符串或列表

2.1函数的分类:

无参数无返回值的

def mvprint():
    print("-" *20)

无参数有返回值的

def mycpu():
     return info

有参数无返回值的

def set(a)
     pass

有参数有返回值的

def cal(a,b)
    c=a+b

2.2局部变量与全局变量

局部变量——在函数中定义的变量,仅作用于函数内部

全局变量—— 全局变量与局部变量重复定义时,函数里优先局部变量

如果函数内部要对全局变量进行修改的话,使用global关键字

global name
name='yh'

2.3引用

万物皆对象,在函数的调用时,实参传递的是对象的引用。

a=1   ###不可变类型
def func(x)
     print(id(x))   #x的内存地址
     x=2
    print(id(x))   #x的内存地址发生变化
    print(x)  ##x为2

print(id(a))   #
func(a)        #a与开始的x是一个地址
print(a)     #a为1
##可变类型
li=[]
def testRenc(p):
    print(id(p))
    li.append([1,2,3])
    print(p)           ###内部的数据与外部一直
 
print(id(li))
testRenc(li)li
print(li)           ###外部的

2.4匿名函数

lambda 参数1,参数2,参数3: 执行代码语句

缺点——只能是单个表达式,不能是一个代码块。

##普通函数
def test(x,y):
     return x+y
test(1,2)
###匿名函数,自带return
test=lambda x,y:x+y
test(1,2)

lambda与三元计算

if a:
   b
else:
   c
##等效为
b if a else c
###在lambda中
greater=(lambda x,y:x if x>y else y)
print(greater(3,5))
##也可以直接
greater=(lambda x,y:x if x>y else y)(3,5)
print(greater)

2.5递归函数

如果在一个函数内部不调用其他的函数,而是自己本身,必须设定结束的条件,不然会一直执行下去

###求阶乘
def fac(n):
    if n==1:
       return 1
else: return n*fac(n-1)
import  os  ##文件操作模块
def findFile(file_Path):
    listRs=os.listdir(file_Path)   ##得到该路径下所有文件夹
    for fileitem in listRs:
        full_path=os.path.join(file_Path,fileitem) ###获取完整的文件路径
        if os.path.isdir(full_path):  ##判断是否是文件夹
            findFile(full_path)   #如果是一个文件夹,再次去递归
        else:
            print(fileitem)
            pass
        pass
    else:
        return
    pass
##调用搜索文件对象
findFile('D:/software')
原文地址:https://www.cnblogs.com/yilia-er/p/14078742.html