python设计函数计算 1**2+2**2+n**2_python程序设计——函数设计与调用

本文详细介绍了Python函数的设计,包括函数定义与调用、形参与实参、参数类型、变量作用域等概念。通过实例讲解了默认值参数、关键参数、可变长度参数的使用,以及参数传递时的序列解包。还讨论了全局变量的使用注意事项,并提供了两个函数实例,分别是计算字符串中大写字母和小写字母数量,以及对列表进行特定条件排序的函数。
摘要由CSDN通过智能技术生成

一、函数定义与调用

def函数名([参数列表]):‘‘‘注释‘‘‘函数体

#输出小于n的斐波那契数

>>deffib(n):

a,b=1,1

while a

a,b=b,a+bprint()>>fib(3)1 1 2

二、形参与实参

在绝大多数情况下,在函数内部直接修改形参的值不会影响实参

defaddOne(a):print(a)

a+=1

print(a)>>a=3

>>addOne(a)3

4

>>a3

修改函数参数值的方式:

如果传递给函数的是可变序列,

并且在函数内部使用下标或其他方式为课表序列增加、删除、修改元素值时,

修改后的结果可以反映到函数之外,即实参得到相应修改

# 修改列表元素的值

defmodify(v):

v[0]= v[0] + 1

>>a=[2]>>print(a)

[2]>>modify(a)>>print(a)

[3]

#为列表增加元素

defaddList(v,item):

v.append(item)>>a=[2]>>addList(a,3)>>print(a)

[2,3]

三、参数类型

python函数参数主要分为:普通参数、默认值参数、关键参数、可变长度参数等

在定义函数时不需要指定参数的类型,形参类型由实参类型以及python解释器的理解和推断决定

同样,不需要指定函数的返回值类型,由return语句返回值的类型决定

缺少return语句或没有执行return语句时,默认返回空值None

1. 默认值参数

调用带有默认值的函数时,可以不对默认值参数赋值,也可以通过显示赋值来替换其默认值

在定义带有默认值的函数时,默认值参数必须出现在函数形参列表的最右端,且任何一个默认值参数右边都不能再出现非默认值参数

def 函数名(..., 形参名=默认值 ):

函数体def say(message, time=1):print((message+‘ ‘)*times)

>>say.__defaults__

(1,)

2.关键参数

指调用函数时的参数传递方式,而与函数定义无关

通过关键参数可以按名字传递值,实参顺序可以和形参不一致

def demo(a,b,c=5):print(a,b,c)>>demo(3,7)3 7 5

>>demo(c=8,a=9,b=0)9 0 8

3.可变长度参数

*parameter 用来接收任意多个实参并将其放在一个元组中

**parameter 用来接收类似于关键参数一样显示赋值形式的多个实参并将其放入字典中

def demo(*P):print(P)#将实参放入元组

>>demo(1,2,3)

(1,2,3)#在调用函数时,自动将接收参数转换为字典

def demo(**p):for item inp.items():print(item)>>demo(x=1,y=2,z=3)

(‘x‘, 1)

(‘y‘, 2)

(‘z‘, 3)

4.参数传递时的序列解包

可以使用列表、元组、集合、字典及其他可迭代对象作为实参,

并在实参名称前加一个星号,解释器自动进行解包,并传递给多个单变量形参

要保证实参中元素个数与形参个数相等

defdemo(a,b,c):print(a+b+c)>>seq = [1,2,3]>>demo(*seq)6

#字典型,默认按照键解包

>>dic={1:‘a‘,2:‘b‘,3:‘c‘}>>demo(*dic)6

#指定按照值解包

>>demo(*dic.values())

abc

四、变量作用域

函数内部定义的变量一般为局部变量,不属于任何函数的变量一般为全局变量

应尽量避免使用全局变量,引用速度慢,增加不同函数之间的隐式耦合度

如果想在函数内部修改一个定义在函数外的变量值,那么这个变量就不能是局部的

defdemo():global x #声明全局变量

x=3 #修改全局变量的值

y=4 #局部变量

print(x,y)

x=5 #在函数外定义全局变量

demo() #调用函数,修改全局变量的值

print(x)

out:5

print(y) #函数结束后,局部变量自动删除

out: NameError: name ‘y‘ is notdefineddel x #删除全局变量

不同模块间共享全局变量,定义单独的模块,传递全局变量

#定义模块 A.py

global_var =0#在模块 B.py中

importA

A.global_var= 1

#在模块C.py中

importA

A.global_var= 2

函数实例:

1、编写函数,接收字符串参数,返回一个元组,其中第一个元素为大写字母个数,第二个为小写字母个数

defcountStr(s):

result=[0,0]for ch ins:if ‘a‘<= ch <= ‘z‘:

result[1] += 1

elif ‘A‘ <= ch <= ‘Z‘:

result[0]+= 1

returnresult

tmpStr= ‘abANV‘bigN,littleN=countStr(tmpStr)print(bigN,littleN)

out:3 2

2、编写函数,接收一个所有元素值互不相等的整数列表x和一个整数n,要求将值为n的元素作为支点,

将列表中所有小于n的元素全部放在n的前面,所有值大于n的元素放在n后面

1 importrandom2 defsortN(x,n):3 if n not inx:4 print(n,‘is not an element of‘,x)5 return

6

7 i = x.index(n) #获取指定元素在列表中的索引

8 x[0],x[i] = x[i],x[0] #与第0个元素交换

9 key =x[0]10

11 i =012 j = len(x)-1

13 while i<14 while i j and x>=key:15 j-=114>

16 x[i]=x[j] #从后向前找第一个比指定元素小的元素

17

18 while i < j and x[i] <=key:19 i+=1

20 x[j]=x[i] #从前向后找第一个比指定元素小的元素

21

22 x[i] =key23

24 return x

1 x=list(range(1,10))2 random.shuffle(x)3 print(x)4 sortN(x,4)5 print(x)

原文:https://www.cnblogs.com/feinaio2017/p/8799216.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值