1 定义函数后必须得调用才生效
def hanshu():
print('nihao')
hanshu()
结果是:
nihao
2 函数可以嵌套函数,但得调用才生效
def hanshu():
print('nihao')
def hello():
print('python')
hello()
hanshu()
结果是:
nihao
python
3 函数的形参、实参
3.1 形参、实参定义
定义函数的时候的变量叫形参(名字任意)。
真实的数据信息,被调用函数的时候传递的值,叫实参。
def welcome(x):
print('welcome ', x)
welcome('hh')
结果是:
welcome hh
3.2 四种不同的形参
1 位置参数(形参和实参必须保持一致)
def getinfo(name, age):
print('姓名', name, '年龄', age)
getinfo('westos', 12)
getinfo(12, 'westos')
getinfo(age=12, name='westos')
结果是:
姓名 westos 年龄 12
姓名 12 年龄 westos
姓名 westos 年龄 12
2 默认参数(没有传递值就用默认值)
def getinfo(name, age=12):
print('姓名', name, '年龄', age)
getinfo('hh', 18)
getinfo('ws')
结果是:
姓名 hh 年龄 18
姓名 ws 年龄 12
3 可变参数(args)
*args:可变参数,可接收多个参数
args:是元组类型数据。
def mysum(*args):
print(*args)
print(args)
sum = 0
for item in args:
sum += item
print(sum)
mysum(1, 2, 3, 4, 5, 6, 7, 8, 9)
结果是:
1 2 3 4 5 6 7 8 9
(1, 2, 3, 4, 5, 6, 7, 8, 9)
45
参数的解包:在参数名前加*
def mysum(*args):
print(*args)
print(args)
sum = 0
for item in args:
sum += item
print(sum)
num1 = [1, 2, 3, 4]
num2 = (1, 2, 3, 4)
num3 = {1, 2, 3, 4}
mysum(*num1)
mysum(*num2)
mysum(*num3)
或;
def mysum(*args):
print(*args)
print(args)
sum = 0
for item in args:
sum += item
print(sum)
#num1 = [1, 2, 3, 4]
#num2 = (1, 2, 3, 4)
#num3 = {1, 2, 3, 4}
mysum(*[1, 2, 3, 4])
mysum(*(1, 2, 3, 4))
mysum(*{1, 2, 3, 4})
结果是:
1 2 3 4
(1, 2, 3, 4)
10
1 2 3 4
(1, 2, 3, 4)
10
1 2 3 4
(1, 2, 3, 4)
10
4 关键字参数
def getinfo(name,age,**b):
print(name)
print(age)
print(b)
d = dict(a=1,b=2)
print(d)
print(*d)
getinfo('westos',12,**d)
结果是:
{‘a’: 1, ‘b’: 2}
a b
westos
12
{‘a’: 1, ‘b’: 2}
def getinfo(name,age,**b):
print(name)
print(age)
print(b)
getinfo('westos',12,h=['cd','rt'],gender='female')
结果是:
westos
12
{‘h’: [‘cd’, ‘rt’], ‘gender’: ‘female’}
4 函数的返回值
若函数运算的结果,还需要进一步操作需要给函数一个返回值,return用来返回函数执行的结果,如果函数没有返回值,默认返回None。
函数一旦遇到return函数执行结束,后面的代码不会执行。 多个返回值的时候,python会帮我们封装成一个元组类型。
def mypow(x, y=2):
return x ** y, x + y
print('????')
a = mypow(4)
print(a)
结果是:
(16, 6)
5 变量的作用域
(1)局部变量:又可称为内部变量,即在函数内部定义的变量,在函数内部定义的变量只在函数内部起作用,函数执行结束后变量会自动删除。
(2)全局变量:既可以是某对象函数创建,也可以是在本程序任何地方创建。全局变量是可以被本程序所有对象或函数引用。
a = 1
print('outside:',id(a))
def f():
a = 5
print('intside:',id(a))
f()
print(a,id(a))
结果是:
outside: 2012997552
intside: 2012997616
1 2012997552
若声明全局变量:
a = 1
print('outside:',id(a))
def f():
global a
a = 5
print('intside:',id(a))
f()
print(a,id(a))
结果是:
outside: 1348528048
intside: 1348528112
5 1348528112
6 函数练习
练习1:
编写一个函数cacluate, 可以接收任意多个数,返回的是一个元组.
元组的第一个值为所有参数的平均值, 第二个值是大于平均值的所有数.
def cacluate(*args):
avg = sum(args) / len(args)
up_avg = []
for item in args:
if item >avg:
up_avg.append(item)
return avg, up_avg
print(cacluate(1, 2, 3, 4, 5))
结果是:
(3.0, [4, 5])
练习2:
编写一个函数, 接收字符串参数, 返回一个元组,‘ehllo WROLD’
元组的第一个值为大写字母的个数, 第二个值为小写字母个数
def word(*args):
upper_word = 0
lower_word = 0
word=input("字符串:")
for i in word:
if i.isupper():
upper_word+=1
elif i.islower():
lower_word+=1
return upper_word,lower_word
print(word())
结果是:
字符串:ehllo WROLD
(5, 5)
或:
def word(*args):
upper_word = 0
lower_word = 0
for i in args:
if i.isupper():
upper_word+=1
elif i.islower():
lower_word+=1
else:
continue
return (upper_word,lower_word)
a='ehllo,WROLD'
print(word(*a))
结果是:(5,5)
练习3:
编写函数, 接收一个列表(包含30个整形数)和一个整形数k, 返回一个新列表.
函数需求:
将列表下标k之前对应(不包含k)的元素逆序;
将下标k及之后的元素逆序;
[1,2,3,4,5] 2 [2,1,5,4,3]
import random
list=[]
def fun(alist,k):
if k <0 or k>len(alist):
return 'error key'
return alist[:k][::-1]+alist[k:][::-1]
print(fun([1,2,3,4,5],2))
结果是:
[2, 1, 5, 4, 3]
练习4 用函数实现100-200所有的素数
#提示:素数的特征是除了1和其本身能被整除,其它数都不能被整除的数。
def test(num):
list = [] #定义一个列表 用于存储计算的数
i = num -1 # 去除本身
while i > 1: # 去除1
if num %i == 0 : #判断是否有余数
list.append(i) # 将所有的能整除i的数加入列表
i -= 1
if len(list) == 0: # 如果列表为空 就是表示除了1和它本身能整除
print(num,end=' ')
def test2(start_num,end_num):
j = start_num
while j < end_num:
test(j)
j += 1
test2(1,20)
print('')
来源:CSDN
作者:weixin_2158
链接:https://blog.csdn.net/weixin_2158/article/details/104673464