python之函数

99封情书 提交于 2020-03-07 10:32:21

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('')
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!