Python 函数

函数的理解和定义

如何定义一个函数

def hello():
    print('hello')
    print('python')

通过函数名去调用函数

hello()
hello()

函数里面嵌套函数

def westos():
    print('is westos')
    def python():
        print('is python')
    python()
westos()

定义函数的时候的变量,叫形参(形参可以任意起名)

def welcome(a):
    print('hello',a)

真实的数据信息,调用函数时传的参数称实参

welcome('tom')

在这里插入图片描述
在这里插入图片描述

形参

参数:形参 实参
形参:位置参数 默认参数 可变参数 关键字参数

位置参数:形参和实参个数必须保持一致

def getInfo(name,age): #按照位置传参
    print(name,age)
getInfo('westos',11)
# getInfo(11,'westos')
getInfo(age=11,name='westos')

在这里插入图片描述
在这里插入图片描述
默认参数 形参和实参数数量可以不一致

def mypow(x,y=2):
    print(x**y)
mypow(4)
mypow(2,3)

在这里插入图片描述
在这里插入图片描述
可变参数

def mysum(*a):
    print(*a)
    print(a)
    sum = 0
    for item in a:
        sum += item
    print(sum)
mysum(1,2,3,4,6,7,8)

在这里插入图片描述
在这里插入图片描述
关键字参数
**kwargs:是一个字典 可以传递任意多的key-value

def getStuInfo(name,age,**kwargs):
    print(name)
    print(age)
    print(kwargs)
getStuInfo('westos',11)

函数的返回值
返回值:函数运算的结果,还需进一步操作,给函数一个返回值
return用来返回函数执行的结果,如果没有返回值,默认返回None
python可以间接返回多个值(返回了一个元组)
一旦遇到return 函数执行结束 后面的代码不会执行

def mypow(x,y=2):
    return x**y,x+y
    print('!!!!!!!!!!!')

a = mypow(4)
print(a)
print(mypow(3))

在这里插入图片描述
在这里插入图片描述

变量的作用域

局部变量:在函数内部定义的变量 只在函数内部起作用 函数执行结束 变量会
自动删除

a = 1
print('outside:',id(a))

def fun():
    #global a #声明a为全局变量
    a = 5
    print('inside:',id(a))
fun()
print(a)
print(id(a))

在这里插入图片描述
在这里插入图片描述
可变参数练习

** 案例1:
    编写一个函数cacluate, 可以接收任意多个数,返回的是一个元组.
    元组的第一个值为所有参数的平均值, 第二个值是大于平均值的所有数.

在这里插入图片描述
在这里插入图片描述

**案例2:
  编写一个函数, 接收字符串参数, 返回一个元组,'ehllo WROLD'
  元组的第一个值为大写字母的个数, 第二个值为小写字母个数.

在这里插入图片描述
在这里插入图片描述

**案例3:
    编写函数, 接收一个列表(包含30个整形数)和一个整形数k, 返回一个新列表.
    函数需求:
        - 将列表下标k之前对应(不包含k)的元素逆序;
        - 将下标k及之后的元素逆序;
[1,2,3,4,5] 2   [2,1,5,4,3]
import random
# def fun(alist,k):
#     if k<0 or k>len(alist):
#         return 'error key'
#     newl1 = alist[:k]
#     newl2 = newl1[::-1]
#     newl3 = alist[k::]
#     newl4 = newl3[::-1]
#     return newl2 + newl4
# list = []
# for i in range(30):
#     num = random.randint(1,100)
#     list.append(num)
# print(list)
# a = fun(list,4)
# print(a)
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,65],2))

函数练习

题目需求:
    对于一个十进制的正整数, 定义f(n)为其各位数字的平方和,如:
    f(13) = 1**2 + 3**2 = 10
    f(207) = 2**2 + 0**2 + 7**2 = 53
    下面给出三个正整数k,a, b,你需要计算有多少个正整数n满足a<=n<=b,
    且k*f(n)=n
输入:
    第一行包含3个正整数k,a, b, k>=1,  a,b<=10**18, a<=b;
输出:
    输出对应的答案;
范例:
    输入: 51 5000 10000
    输出: 3
# 1.接收变量k,a,b
s = input('请输入(k,a,b):') #51 5000 10000
# 存储整型k,a,b
li = []
for item in s.split():
    li.append(int(item))
k,a,b = li
count = 0
for i in range(a,b+1):
    if k*f(i) == i:
        count += 1
print(count)
编写一个名为collatz()的函数,它有一个名为number的参数。
如果参数是偶数,那么collatz()就打印出number//2,并返回
该值。如果number是奇数,collatz()就打印并返回3*number+1。
然后编写一个程序,让用户输入一个整数,并不断对这个数
调用collatz(),直到函数返回值1(令人惊奇的是,这个序列
对于任何整数都有效,利用这个序列,你迟早会得到1!既使数学
家也不能确定为什么。你的程序在研究所谓的“Collatz序列”,
它有时候被称为“最简单的、不可能的数学问题”)。
- 输入:
    3

- 输出:
    10
    5
    16
    8
    4
    2
    1
def collatz(number):
    if number == 1:
        exit()
    elif number %2 == 0:
        return number //2 #取整
    else:
        return 3 * number + 1
num = int(input('Num:'))
while True:
    num = collatz(num)
    print(num)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值