MSCBSC 移动大发棋牌龙虎
搜索
登录注册
网络优化工程师招聘专栏 4G/LTE通信工程师最新职位列表 通信实习生/应届生招聘职位
 

  • 阅读:1052
  • 回复:0
PYTHON学习笔记【函数介绍】
细阿哥
初级会员
鎵嬫満鍙风爜宸查獙璇? style=


 发短消息    关注Ta 

积分 480
帖子 96
威望 1562 个
礼品券 15 个
专家指数 0
注册 2009-2-25
专业方向  通信
回答问题数 1
回答被采纳数 0
回答采纳率 0%
 
发表于 2019-10-22 17:48:17  只看楼主 

1     函数——提高代码的利用率

函数的定义

*  无参数函数

def 函数名():   #首字母小写

 

def print_hello():   #定义一个函数
   
print("Hello World!")

#定义的函数不会自行执行,需要调用函数
print_hello()

*  带参数的函数

 

def 函数名(参数1,参数2,参数3...):   #参数名称不用提前声明,参数都是形参,形参特点,不用在前面定义,也不会和之前定义的变量冲突。

def cal(a,b):
    sum=a+b
   
print("%s加上%s等于%s"%(a,b,sum))
a=
1
cal(a,20)    #传给函数的数据叫实参。 a和20都是实参,需要具体的值或提前定义的变量

 

*  带返回值的函数

 

def cal_area(r):
    pi=
3.1415926
   
return pi*(r**2#return执行后,return后面的代码不执行。return表示函数结束

r=9.9
res=cal_area(r)
print("半径R=%d的面积:%.4f"%(r,res))

 

*  带条件判断的函数

 

def sum_2num(a,b):
   
if is_number(a) and is_number(b):   #判断是否是数字类型
       
sum = a + b
       
return sum
   
else:
       
print("没法计算")


def is_number(a):
   
if not isinstance(a,(int,float)):   #判断是否是数字类型
       
print("传入的参数%s不是数字类型"%a)
       
return False
    else
:
       
return True
a="A"
b="b"
s=sum_2num(a,b)
print(s)

 

函数——局部变量和全局变量

局部变量——函数里面定义的变量

全局变量——函数外面定义的变量

在函数中修改全局变量:

1、 如果是可变类型,可以执行修改变量的值

2、 如果是不可变类型,修改全局变量其实是修改变量的引用

*  在函数中不使用global声明全局变量时,不能修改全局变量的的本质,是不能修改全局变量的指向,即不能将全局变量指向新的数据

*  对于不可变类型的全局变量来说,因其指向的数据不能修改,所以不使用global时无法修改全局变量。

*  对于可变类型的全局变量来说,因基指向的数据可以修改,所以不使用global时也可修改全局变量。

*  全局变量定义在调用的函数之前

*  可变类型,值和引用均可改变

*  等号“=”用于改变可变和不可变类型的引用

 

name=['zhangshan','lis','ww']
stu={
'name':'laowang'}
a=
'laogo'
b=100

def test1():
    name[
2]='zifei'
   
stu['age']=23
   
global a
    a=
'golbin'  #修改全局变量
   
global b
    b+=
1
test1()
print("修改后全局变量name的值%s"%name)
print("修改后全局变量stu的值%s"%stu)
print("修改后全局变量a的值%s"%a)
print("修改后全局变量b的值%s"%b)

 

函数返回多个值

 

def test():
    a=
1
   
b=2
   
return a,b
x
,y=test()
print(x,y)
x=test()
print(x)

def test2():
    a=
1
   
b=2
   
return [a,b]
x=test2()
print(x)

结果:

1 2

(1, 2)

[1, 2]

 

函数参数

 

def test(x,y,z=10,w=20):  #z的默认值为10
   
print("w=%s;x=%s;y=%s;z=%s"%(w,x,y,z))
   
return x+y+z

print(test(2,4),test(2,4,6),test(2,4,w=6))#指定第3个为w

 

结果:

w=20;x=2;y=4;z=10

w=20;x=2;y=4;z=6

w=6;x=2;y=4;z=10

16 12 16

 

 

不定长参数的函数

【例1

def test(x,y,*args,z=10):    #定义一个两个以上参数的函数(*args参数个数不定)和一个包含缺省值的参数,包含缺省值的参数放在后面
   
print(x,y,z,args)
    sum=x+y+z
   
for i in args:
        sum+=i
   
return sum
print("不修改缺省值和为%s;修改缺省值和为%s"%(test(1,2,3,4,5,6,8),test(1,2,3,4,5,6,8,z=20)))



结果:

 

1 2 10 (3, 4, 5, 6, 8)

1 2 20 (3, 4, 5, 6, 8)

不修改缺省值和为39;修改缺省值和为49

 

【例2


def test2(x,*args,**kwargs):
   
#  *args表示多个普通参数,将多个参数收集到一个“元组”对象中
    # **kwargs 多个有名字的参数, 将多个参数收集到一个“字典”对象中
   
print("x=%s"%x)
   
print(args)
   
print(kwargs)
    sum=x
   
for i in args:
            sum+=i
   
for i in kwargs.values():
            sum+=i
   
return sum

print("和1为%s"%test2(2,3,4,num1=5,num2=6))
print("="*50)
#集合的拆分
nums=[3,4,5]
nums2={
'num1':5,'num2':6,'num3':7}
print("和2为%s"%test2(2,*nums,**nums2))
 

结果:

 

x=2

(3, 4)

{'num1': 5, 'num2': 6}

120

==================================================

x=2

(3, 4, 5)

{'num1': 5, 'num2': 6, 'num3': 7}

232

 

变量的引用

def test1(x,y):
    x.replace(
"c","C")   # 构建新的字符串,未赋值给任何变量
   
y.append(10)        # 传入的列表为可变类型,新增元素不改变引用
   
print("x变量指向的内存地址为:%s,%s"%(id(x),x))
   
print("y变量指向的内存地址为:%s,%s" % (id(y),y))
    x=x.replace(
"c", "C")   #将新的字符串赋值给x变量,改变了引用
   
print("x2变量指向的内存地址为:%s,%s" % (id(x),x))

a=
"abcdefg"
b=[1,2,3]
print("a变量指向的内存地址为:%s,%s" % (id(a),a))
print("b变量指向的内存地址为:%s,%s" % (id(b),b))
test1(a
,b)

 

结果:

a变量指向的内存地址为:2308406102816,abcdefg

b变量指向的内存地址为:2308405617288,[1, 2, 3]

x变量指向的内存地址为:2308406102816,abcdefg

y变量指向的内存地址为:2308405617288,[1, 2, 3, 10]

x2变量指向的内存地址为:2308407657336,abCdefg

 

递归函数,在函数内部调用函数本身

 

1

def test(n):
   
#递归函数,计算数字n的阶乘
    #1、在函数内部调用自己本身
    #2、递归函数本质上是一个方法的循环调用,有可能出现死循环
    #3、一定要定义递归的边界(什么时候退出循环)
   
if n==1#递归的边界
       
return 1
   
return n*test(n-1)

n=
4
print(test(n))

 

2

通过函数的递归,获取斐波那契数列

#斐波那契数列,指的是这样一个数列:112358132134……在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1F(2)=1, F(n)=F(n-1)+F(n-2)n>=3nN*

def F(n):  #获取斐波那契数列第n个的值
   
if n==1 or n==2:
       
return 1
   
return F(n-1)+F(n-2)
n=
30
number=[]
for i in range(1,n+1):
    number.append(F(i))
print(number)

 

匿名函数

lambda关键字创建小型匿名函数,省略了用def声明函数的标准步骤,只包含一个语句:

Lambda [arg1[,arg2,arg3…]]:expression

1

fun=xy:x+y   (fun())

2

 

def test(a,b,func):#定义三个变量
   
res=func(a,b)
   
return res

print(test(22,33,lambda x,y:x*y))#第三个变量用匿名函数赋值,计算方式可加、减根据需要修改灵活

 

3,列表里面字典的排序:

 

stus=[{"name":"zs","age":23},{"name":"ww","age":33},{"name":"ls","age":34}]
stus.sort(
key=lambda x:x["name"])  #当前x为列表里面的元素(字典),取字典里面键为name的值进行排序
print(stus)                         #匿名函数的功能,返回列表中每个元素(字典)的name对应的值

 

 

4,动态

def test(a,b,func):
    res=func(a
,b)
   
return res

func_new=
input("请输入你的操作:")
func_new=
eval(func_new)#字符串转为可以执行的表达式
print(test(22,33,func_new))
 结果:
请输入你的操作:lambda x,y:x+y

55

闭包

内部函数对外部函数作用域里变量的引用(非全局变量),则称内部函数为闭包。

1

                                             image.png

2

image.png

*  闭包的应用,一元一次方程

image.png

常用内置函数

函数

说明

int(x[,base])

x转换为一个整数

long(x[,base])

x转换为一个长整数

float(x)

x转换为一个浮点数

complex(rel[,imag])

创建一个复数

str(x)

将对象x转换为字符串

repr(x)

将对象x转换为表达式字符串

eval(str)

用来计算在字符串中的有效python表达式,并返回一个对象

tuple(s)

将序列s转换为一个元组

list(s)

将序列s转换为一个列表

chr(x)

将一个整数转换为一个字符

unichr(x)

将一个整数转换为unicode字符

ord(x)

将一个字符转换为它的整数值

hex(x)

将一个整数转换为一个十六进制字符串

oct(x)

将一个整数转换为一个八进制字符串



Cmp(item1,item2)

比较两个值,python2

Len(item)

计算元素个数

Max(item)

返回元素最大值

Min(item)

返回元素最小值

Del(item)

删除元素

 

cmp函数(python2)

cmp(item1,item2)比较两个值,相等返回0item1小于item2返回-1item1大于item2,返回1

 

>>> a=1

>>> b=4

>>> c=cmp(a,b)

>>> c

-1

>>> a="f"

>>> b="e"

>>> c=cmp(a,b)

>>> c

1

 

统计字符出现次数

 

str=input("Please input str:")
res={}

for i in str:
  
if i in res:
     res[i]=res[i]+
1
  
else:
     res[i]=
1
print(res)

内建函数

dir(__builtins__)

Ø  range(start,stop[,step])  计数从start开始,默认是从0开始,到stop结束,但不包括stop;每次跳跃的间距,默认为1

Ø  map(function,sequence[,sequence,…])根据提供的函数,对指定序列做映射

python2直接返回列表,python3返回一个迭代器

image.png

python3

image.png

image.png

Ø  filter(function or None,sequence) 对指定序列执行过滤操作,python3返回一个filter对象,是一个迭代器;Python2直接返回列表

python2

image.png

python3

image.png

Ø  reduce(function,sequence[,initial]) 对参数序列中元素进行累积

python3里面,reduce()函数已经被从全局名字空间里移除了,它现在被放置在fuctools模块里面

image.png

 

微信扫描分享本文到朋友圈
微信扫描二维码,手机阅读更便捷
每天分享朋友圈可获得威望奖励(前两次)

对本帖内容的看法? 我要点评

 
[充值威望,立即自动到帐] [VIP贵宾权限+威望套餐] 另有大量优惠赠送活动,请光临充值中心
充值拥有大量的威望和最高的下载权限,下载站内资料无忧

快速回复主题    
标题
内容
 上传资料请点左侧【添加附件】



当前时区 GMT+8, 现在时间是 2019-11-21 08:13:46
渝ICP备11001752号  Copyright @ 2006-2016 mscbsc.com  本站统一服务邮箱:mscbsc@163.com

Processed in 0.106195 second(s), 13 queries , Gzip enabled
TOP
清除 Cookies - 联系我们 - 移动通信网 - 移动大发棋牌龙虎 - 通信招聘网 - Archiver