您现在的位置是:主页 > news > 焦作会做网站制作的有哪家/磁力猫引擎
焦作会做网站制作的有哪家/磁力猫引擎
admin2025/4/28 20:09:35【news】
简介焦作会做网站制作的有哪家,磁力猫引擎,网页版微信登陆入口,荥阳郑州网站建设目录 Python中函数(function)的用法 参数:形参和实参 形参 变量:局部变量和全局变量 局部变量 全局变量 生成式 高阶函数 map函数 reduce函数 filter过滤函数 sorted函数 匿名函数 练习 Python中函数(function)的用法 函数代码块以 def 关键词开头&…
目录
Python中函数(function)的用法
参数:形参和实参
形参
变量:局部变量和全局变量
局部变量
全局变量
生成式
高阶函数
map函数
reduce函数
filter过滤函数
sorted函数
匿名函数
练习
Python中函数(function)的用法
- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()
- 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明
- 函数内容以冒号起始,并且缩进
- return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None
参数:形参和实参
形参
位置参数
def getInfo(name,age):print(name,age)
getInfo('westos',11)
getInfo(11,'wesots') # 打印出结果为name=11,age="westos",不符合常理,因此顺序不能颠倒
getInfo(age=11,name='westos') # 也可以直接对参数name和age直接传值
默认参数
def mypow(x,y=2): # y=2即为默认参数,有默认参数时,形参和实参数目可以不一致print(x**y) # 打印x的y次方
mypow(4) # 没有传值使用默认的2
mypow(2,3) # 传值则使用所传递的数值来运算
可变参数
def mysum(*a): # 加*号表示传多个参数,不加则默认为一个sum = 0for item in a:sum += itemprint(sum)
mysum(1,2,3,4,5)
关键字参数
def getInfo(name,age,**kwargs) # **kw[keywords]关键字参数print(name,age)print(kwargs)
getInfo('westos',18,gender='female',hobbies=['coding','running'])
变量:局部变量和全局变量
局部变量
在函数内部定义的变量,只在函数内部起作用,函数执行结束,变量会失效,在函数外访问不到
全局变量
在整个程序中函数内外都可以访问到
a = 1
print('outside:',id(a))
def fun():a = 5print('inside:',id(a))fun()
print(a)
print(id(a))
a = 1
print('outside:',id(a))
def fun():global a # 声明为全局变量a = 5print('inside:',id(a))fun()
print(a)
print(id(a))
生成式
示例1:
假设有20个学生,学生名为westosX,学生分数在60~100之间,筛选出成绩在90分以上得学生
import random
stuInfo = {} # 创建一个空字典
for i in range(20):name = 'westos' + str(i)score = random.randint(60,100)stuInfo[name] = score # 通过key值找到value值
# 方式一:
# highScore = {}
# for name,score in stuInfo.items():
# if score > 90:
# highScore[name] = score # 如果score大于90,将其放入highScore字典中
# print(highScore)
# 方式二:
# name:score为需要获取的值,for name,score in stuInfo.items() if score > 90表示获取到的值需要满足的条件
print({name:score for name,score in stuInfo.items() if score > 90})
示例2:
把所有的key值都变为大写
d = dict(a=1,b=2) # 工厂函数
# 方案一:
# print(d)
# new_d = {}
# for i in d:
# new_d[i.upper()] = d[i]
# print(new_d)
# 方案二:
print({k.upper():v for k,v in d.items()})
示例3:
大小写key值合并,统一以小写输出
d = dict(a=2, b=1, c=2, B=9, A=10)
# # 输出{'a':12, 'b':10, 'c':2}
# # new_d = {}
# # for k,v in d.items():
# # low_k = k.lower()
# # if low_k not in new_d:
# # new_d[low_k] = v
# # else:
# # new_d[low_k] += v
# # print(new_d)
print({k.lower():d.get(k.lower(),0) + d.get(k.upper(),0) for k in d})
高阶函数
map函数
map()函数接收两个参数,一个是函数,一个是序列。map将传入的函数依次作用到序列的每个元素,并且把结果作为新的序列返回
练习:10个数在[2,7]中取随机数求阶乘
import random
def f(x): # 定义阶乘函数res = 1for i in range(1,x+1):res *= ireturn res
# 定义列表生成式
li = [random.randint(2,7) for i in range(10)] # 在2~7之间产生10个随机数
print(li)
print(list(map(f,li)))
reduce函数
reduce:把一个函数作用在一个序列上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算
reduce(f,[x1,x2,x3,x4,x5]) = f(f(f(x1,x2),x3),x4)
python2中为内置函数;
python3通过:from functools import reduce 将其导入
# 相当于做累乘、累加操作
from functools import reduce
def multi(x,y):return x * yprint(reduce(multi,range(1,4)))def add(x,y):return x + y
print(reduce(add,[1,2,3,4,5]))
filter过滤函数
和map()类似,也接收一个函数和一个序列。但是和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素
# 判断(0,100)中的偶数
def isOdd(num):if num % 2 == 0:return Trueelse:return False
print(list(filter(isOdd,range(100))))# 判断1~100中的质数
def isPrime(num):for i in range(2,num):if num % i == 0:return Falseelse:return True
print(list(filter(isPrime,range(1,100))))
sorted函数
# li = [2,3,1,4]
# li.sort() # 顺序排序
# print(li)# li.sort(reverse=True) # 逆序排序
# print(li)# print(sorted(li)) # 顺序排序
# print(sorted(li,reverse=True)) # 逆序排序
练习:
info = {# 商品名称 商品数量 商品价格('apple1',200,32),('apple4',40,12),('apple3',40,2),('apple2',1000,23),('apple5',40,5)
}
print(sorted(info)) # 按照商品名称排序def sort_by_num(num): # 按照商品数量排序return num[1]
print(sorted(info,key=sort_by_num))def sort_by_price(x): # 按照商品价格排序return x[2]
print(sorted(info,key=sort_by_price))def sort_by_count_price(y): # 先按商品数量排序,数量相同时,按照价格排序return y[1],y[2]
print(sorted(info,key=sort_by_count_price))
匿名函数
匿名函数关键字是lambda,冒号前面是形参,冒号后面是返回值
from functools import reduce
# def fun(*args,**kwargs):
# return args,kwargs
# print(fun([1,2,3,4,5]))# print(lambda *args,**kwargs:(args,kwargs))# def add(x,y):
# return x+y
# print(reduce(lambda x,y:x+y,[1,2,3,4,5]))# def mypow(x):
# return x ** 2
# print(map(lambda x:x ** 2,range(5)))
print(list(filter(lambda x:x%2==0,range(100))))####练习:移动数组中的0
nums = [0, 7, 0, 1, 2, 1, 5,1, 7, 8, 0, 67, 1, 3, 4]print(sorted(nums,key=lambda x:1 if x == 0 else 0))
练习
示例1:
编写一个函数cacluate,可以接收任意多个数,返回的是一个元组,元组的第一个值为所有参数的平均值,第二个值是大于平均值的所有数
def cacluate(*args):avg = sum(args) / len(args)more_avg = []for item in args:if item > avg:more_avg.append(item)return avg,more_avg
a = cacluate(1,2,3,4,5,6,7,8)
print(a)
示例2:
编写一个函数,接收字符串参数,返回一个元组,'ehllo WROLD',元组的第一个值为大写字母的个数,第二个值为小写字母个数
def letterNum(x):upper_letter_count = 0lower_letter_count = 0for i in x:if i.isupper(): # 如果该条件为真upper_letter_count += 1elif i.islower():lower_letter_count += 1else:continuereturn upper_letter_count,lower_letter_count
a = letterNum('ehllo WROLD')
print(a)
示例3:
编写函数,接收一个列表(包含29个1~100之间的随机整型数)和一个整型数k,返回一个新列表.
函数需求:
- 将列表下标k之前对应(不包含k)的元素逆序;
- 将下标k及以后的元素逆序;
[0,2,3,4,5] 2 [2,0,5,4,3]
def fun(li,k):print(li)if k < 0 or k > len(li): # 首先先判断k是否存在return 'error k'return li[:k][::-1] + li[k:][::-1]
print(fun([0,2,3,4,5],2))
示例4:
模拟轮盘抽奖游戏
轮盘分为三部分:一等奖,二等奖和三等奖;
轮盘转的时候是随机的,
如果范围在[0,0.08)之间,代表一等奖
如果范围在[0.08,0.3)之间,代表二等奖
如果范围在[0.3,1.0)之间,代表三等奖
模拟此次活动1000人参加,模拟游戏时需要准备各等级奖品的个数
import random
# 创建一个字典保存对应关系
rewardDict = {'一等奖' : (0,0.08),'二等奖' : (0.08,0.3),'三等奖' : (0.3,1)
}
def lottery(): # 判断用户在哪个得奖区间num = random.random()for k,v in rewardDict.items():if v[0] <= num < v[1]:return k
resultDict = {}
for i in range(1000): # 统计得奖人数res = lottery()if res not in resultDict: # 第一次出现,就只有1resultDict[res] = 1else:resultDict[res] += 1 # 不是第一次出现,直接+1
for k,v in resultDict.items():print(k,'--->',v)
示例5:
腾讯笔试编程题
题目需求:
对于一个十进制的正整数,定义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
def f(n): # 定义f(n)为其各位数字的平方和n = str(n) # 转换为字符串sum = 0for item in n: # 要求和,这里就需要创建一个累加器sum += int(item) ** 2 # 先将item转换为int型再进行平方操作return sum
# print(f(13))
s = input()
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 += 1print(count)
示例6:
- 题目描述:
给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,>并输出结果。输
入值小于1000。
如,输入为10, 程序应该输出结果为2。(共有两对质数的和为10,分别为(5,5),(3,7))
# [2,3,5,7]
- 输入描述:
输入包括一个整数n,(3 ≤ n < 1000)
- 输出描述:
输出对数
- 示例1 :
输入:
10
输出:
2
num = int(input())
def isPrime(num): # 判断输入的数是否是质数for i in range(2,num):if num % i == 0:return Falseelse:return True
# 将所有的质数放在list中
primeList = [i for i in range(2,num) if isPrime(i)]
print(primeList) # 打印所有质数
count = 0 # 创建一个计数器
# [2,3,5,7] 3+7 5+5 7+3(重复)
for item in primeList: # 遍历质数列表if (num - item) in primeList and item <= num - item: #item <= num - item,来保证不重复count += 1
# 寻找相加等于(item1 + item2) = num
print(count)
示例7:
给定一个整形数组, 将数组中所有的0移动到末尾, 非0项保持不变;
在原始数组上进行移动操作, 勿创建新的数组;
# 输入:
第一行是数组长度, 后续每一行是数组的一条记录;
4
0
7
0
2
# 输出:
调整后数组的内容;
4
7
2
0
0
n = ''.join(input().split())
li = [int(i) for i in n]
# 排序
def move_zero(x):if x == 0: # 将列表中每一项都传入和执行排序操作return 2else:return 1
print(sorted(li,key=move_zero))
示例8:
如何快速生成验证码,内推码
import random
import stringcode_str = string.ascii_letters + string.digits
# print(code_str)def gen_code(len=4):# code = ''# for i in range(len):# new_s = random.choice(code_str)# code += new_s# print(code)return ''.join(random.sample(code_str,len))# a = gen_code()
# print(a)print([gen_code(len=6) for i in range(100)])
print(random.sample(code_str,2))